]> Cypherpunks repositories - gostls13.git/commitdiff
net: make IPv6 capability test more suitable for address family selection on the...
authorMikio Hara <mikioh.mikioh@gmail.com>
Fri, 28 Mar 2014 04:27:51 +0000 (13:27 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Fri, 28 Mar 2014 04:27:51 +0000 (13:27 +0900)
For now we strictly use IPV6_V6ONLY=1 for IPv6-only communications
and IPV6_V6ONLY=0 for both IPv4 and IPv6 communications. So let the
capability test do the same.

LGTM=iant
R=golang-codereviews, gobot, iant
CC=golang-codereviews
https://golang.org/cl/80140044

src/pkg/net/ipsock_posix.go

index d2f45060f9876a83f750c7487b0e442d46445498..2ba4c8efd530a393e424c5bc01fc12861de57714 100644 (file)
@@ -40,12 +40,13 @@ func probeIPv4Stack() bool {
 func probeIPv6Stack() (supportsIPv6, supportsIPv4map bool) {
        var probes = []struct {
                laddr TCPAddr
+               value int
                ok    bool
        }{
                // IPv6 communication capability
-               {TCPAddr{IP: ParseIP("::1")}, false},
+               {laddr: TCPAddr{IP: ParseIP("::1")}, value: 1},
                // IPv6 IPv4-mapped address communication capability
-               {TCPAddr{IP: IPv4(127, 0, 0, 1)}, false},
+               {laddr: TCPAddr{IP: IPv4(127, 0, 0, 1)}, value: 0},
        }
 
        for i := range probes {
@@ -54,7 +55,7 @@ func probeIPv6Stack() (supportsIPv6, supportsIPv4map bool) {
                        continue
                }
                defer closesocket(s)
-               syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, 0)
+               syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, probes[i].value)
                sa, err := probes[i].laddr.sockaddr(syscall.AF_INET6)
                if err != nil {
                        continue