net code on IPv4-only machines.
R=r
DELTA=27 (25 added, 0 deleted, 2 changed)
OCL=28404
CL=28411
"io";
"net";
"os";
+ "syscall";
"testing";
)
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)
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
"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
}
"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 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
}