diff options
Diffstat (limited to 'libgo/go/net/ipsock_posix.go')
-rw-r--r-- | libgo/go/net/ipsock_posix.go | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/libgo/go/net/ipsock_posix.go b/libgo/go/net/ipsock_posix.go index 83eaf85..2bddd46 100644 --- a/libgo/go/net/ipsock_posix.go +++ b/libgo/go/net/ipsock_posix.go @@ -101,10 +101,11 @@ func probeIPv6Stack() (supportsIPv6, supportsIPv4map bool) { // // 1. A wild-wild listen, "tcp" + "" // If the platform supports both IPv6 and IPv6 IPv4-mapping -// capabilities, we assume that the user want to listen on -// both IPv4 and IPv6 wildcard address over an AF_INET6 -// socket with IPV6_V6ONLY=0. Otherwise we prefer an IPv4 -// wildcard address listen over an AF_INET socket. +// capabilities, or does not support IPv4, we assume that +// the user wants to listen on both IPv4 and IPv6 wildcard +// addresses over an AF_INET6 socket with IPV6_V6ONLY=0. +// Otherwise we prefer an IPv4 wildcard address listen over +// an AF_INET socket. // // 2. A wild-ipv4wild listen, "tcp" + "0.0.0.0" // Same as 1. @@ -137,7 +138,7 @@ func favoriteAddrFamily(net string, laddr, raddr sockaddr, mode string) (family } if mode == "listen" && (laddr == nil || laddr.isWildcard()) { - if supportsIPv4map { + if supportsIPv4map || !supportsIPv4 { return syscall.AF_INET6, false } if laddr == nil { @@ -155,9 +156,9 @@ func favoriteAddrFamily(net string, laddr, raddr sockaddr, mode string) (family // Internet sockets (TCP, UDP, IP) -func internetSocket(net string, laddr, raddr sockaddr, deadline time.Time, sotype, proto int, mode string) (fd *netFD, err error) { +func internetSocket(net string, laddr, raddr sockaddr, deadline time.Time, sotype, proto int, mode string, cancel <-chan struct{}) (fd *netFD, err error) { family, ipv6only := favoriteAddrFamily(net, laddr, raddr, mode) - return socket(net, family, sotype, proto, ipv6only, laddr, raddr, deadline) + return socket(net, family, sotype, proto, ipv6only, laddr, raddr, deadline, cancel) } func ipToSockaddr(family int, ip IP, port int, zone string) (syscall.Sockaddr, error) { |