]> Cypherpunks repositories - gostls13.git/commitdiff
next step for 6.out on Borg: fix and test
authorRuss Cox <rsc@golang.org>
Thu, 7 May 2009 17:31:48 +0000 (10:31 -0700)
committerRuss Cox <rsc@golang.org>
Thu, 7 May 2009 17:31:48 +0000 (10:31 -0700)
net code on IPv4-only machines.

R=r
DELTA=27  (25 added, 0 deleted, 2 changed)
OCL=28404
CL=28411

src/lib/net/dialgoogle_test.go
src/lib/net/net.go
src/lib/syscall/socket_darwin.go
src/lib/syscall/socket_linux.go

index 690ba572d761fee444280c12b815d2d7a8482ad6..1e0c0aaf065ef69bf758358cde3c82454f1597cb 100644 (file)
@@ -10,6 +10,7 @@ import (
        "io";
        "net";
        "os";
+       "syscall";
        "testing";
 )
 
@@ -81,7 +82,17 @@ func TestDialGoogle(t *testing.T) {
                doDialTCP(t, "tcp", addr);
                if addr[0] != '[' {
                        doDial(t, "tcp4", addr);
-                       doDialTCP(t, "tcp4", addr)
+                       doDialTCP(t, "tcp4", addr);
+
+                       if !preferIPv4 {
+                               // make sure preferIPv4 flag works.
+                               preferIPv4 = true;
+                               syscall.SocketDisableIPv6 = true;
+                               doDial(t, "tcp4", addr);
+                               doDialTCP(t, "tcp4", addr);
+                               syscall.SocketDisableIPv6 = false;
+                               preferIPv4 = false;
+                       }
                }
                doDial(t, "tcp6", addr);
                doDialTCP(t, "tcp6", addr)
index 63074470bc625289c90e7dab7154c81bdf08a0d7..b4bb48b24f2e8fded8d7a14dc76c86019d23e460 100644 (file)
@@ -345,7 +345,7 @@ func internetSocket(net, laddr, raddr string, proto int64, mode string)
        default:
                // Otherwise, guess.
                // If the addresses are IPv4 and we prefer IPv4, use 4; else 6.
-               if preferIPv4 && lip.To4() != nil && rip.To4() != nil {
+               if preferIPv4 && (lip == nil || lip.To4() != nil) && (rip == nil || rip.To4() != nil) {
                        vers = 4
                } else {
                        vers = 6
index dc76b9bead3a9aa66bddf25cd62574123bd02c61..ba640e95682f90f0b4e13402cf3f4d2f64216c24 100644 (file)
@@ -12,12 +12,19 @@ import (
        "unsafe";
 )
 
+// For testing: clients can set this flag to force
+// creation of IPv6 sockets to return EAFNOSUPPORT.
+var SocketDisableIPv6 bool
+
 func SockaddrToSockaddrInet4(s *Sockaddr) *SockaddrInet4;
 func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
 func SockaddrInet4ToSockaddr(s *SockaddrInet4) *Sockaddr;
 func SockaddrInet6ToSockaddr(s *SockaddrInet6) *Sockaddr;
 
 func Socket(domain, proto, typ int64) (ret int64, err int64) {
+       if domain == AF_INET6 && SocketDisableIPv6 {
+               return -1, EAFNOSUPPORT
+       }
        r1, r2, e := Syscall(SYS_SOCKET, domain, proto, typ);
        return r1, e
 }
index 39b9aa60f5579c88830718d817998f006339a5e0..8dc75dd3a4d2058f1d49dfb6fe61e18500dd9eaa 100644 (file)
@@ -12,6 +12,10 @@ import (
        "unsafe";
 )
 
+// For testing: clients can set this flag to force
+// creation of IPv6 sockets to return EAFNOSUPPORT.
+var SocketDisableIPv6 bool
+
 func SockaddrToSockaddrInet4(s *Sockaddr) *SockaddrInet4;
 func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
 func SockaddrInet4ToSockaddr(s *SockaddrInet4) *Sockaddr;
@@ -30,6 +34,9 @@ func saLen(s *Sockaddr) int64 {
 }
 
 func Socket(domain, proto, typ int64) (ret int64, err int64) {
+       if domain == AF_INET6 && SocketDisableIPv6 {
+               return -1, EAFNOSUPPORT
+       }
        r1, r2, e := Syscall(SYS_SOCKET, domain, proto, typ);
        return r1, e
 }