1
0
mirror of https://github.com/golang/go synced 2024-09-30 10:28:33 -06:00

next step for 6.out on Borg: fix and test

net code on IPv4-only machines.

R=r
DELTA=27  (25 added, 0 deleted, 2 changed)
OCL=28404
CL=28411
This commit is contained in:
Russ Cox 2009-05-07 10:31:48 -07:00
parent 88a1aa8e1a
commit 0d33992866
4 changed files with 27 additions and 2 deletions

View 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)

View 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

View 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
}

View 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
}