]> Cypherpunks repositories - gostls13.git/commitdiff
net: fix Dial(":80") on Plan 9
authorDavid du Colombier <0intro@gmail.com>
Thu, 3 Nov 2016 13:57:05 +0000 (14:57 +0100)
committerDavid du Colombier <0intro@gmail.com>
Thu, 3 Nov 2016 13:57:39 +0000 (13:57 +0000)
CL 32101 fixed Dial(":80") on Windows and added TestDialLocal,
which was failing on Plan 9, because it wasn't implemented
on Plan 9.

This change implements Dial(":80") by connecting to 127.0.0.1
or ::1 (depending on network), so it works as documented.

Fixes #17760.

Change-Id: If0ff769299e09bebce11fc3708639c1d8c96c280
Reviewed-on: https://go-review.googlesource.com/32593
Reviewed-by: Russ Cox <rsc@golang.org>
src/net/ipsock_plan9.go

index 3675b23dbc3dca72359d02dd4d23ef39081ec54d..7046a05f344456cada83ce307ff06d6357077d34 100644 (file)
@@ -193,6 +193,9 @@ func dialPlan9(ctx context.Context, net string, laddr, raddr Addr) (fd *netFD, e
 }
 
 func dialPlan9Blocking(ctx context.Context, net string, laddr, raddr Addr) (fd *netFD, err error) {
+       if isWildcard(raddr) {
+               raddr = toLocal(raddr, net)
+       }
        f, dest, proto, name, err := startPlan9(ctx, net, raddr)
        if err != nil {
                return nil, err
@@ -276,3 +279,28 @@ func (fd *netFD) acceptPlan9() (nfd *netFD, err error) {
        }
        return newFD(fd.net, name, listen, ctl, data, fd.laddr, raddr)
 }
+
+func isWildcard(a Addr) bool {
+       var wildcard bool
+       switch a := a.(type) {
+       case *TCPAddr:
+               wildcard = a.isWildcard()
+       case *UDPAddr:
+               wildcard = a.isWildcard()
+       case *IPAddr:
+               wildcard = a.isWildcard()
+       }
+       return wildcard
+}
+
+func toLocal(a Addr, net string) Addr {
+       switch a := a.(type) {
+       case *TCPAddr:
+               a.IP = loopbackIP(net)
+       case *UDPAddr:
+               a.IP = loopbackIP(net)
+       case *IPAddr:
+               a.IP = loopbackIP(net)
+       }
+       return a
+}