]> Cypherpunks repositories - gostls13.git/commitdiff
net: name-based destination address selection
authorChristopher Wedgwood <cw@f00f.org>
Tue, 31 May 2011 15:40:11 +0000 (11:40 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 31 May 2011 15:40:11 +0000 (11:40 -0400)
getaddrinfo() orders the addresses according to RFC 3484.

This means when IPv6 is working on a host we get results like:
    []string = {"2001:4810::110", "66.117.47.214"}

and when it's not working we get:
    []string = {"66.117.47.214", "2001:4810::110"}

thus can drop firstFavoriteAddr.

This also means /etc/gai.conf works on relevant systems.

R=rsc, mikioh.mikioh
CC=golang-dev
https://golang.org/cl/4557058

src/pkg/net/iprawsock.go
src/pkg/net/ipsock.go

index a811027b1c72263a3210459f90a225ccf4fa89f3..357bc91cfeef15faae06b1fc4288124d91913742 100644 (file)
@@ -253,7 +253,7 @@ func hostToIP(net, host string) (ip IP, err os.Error) {
                        err = err1
                        goto Error
                }
-               addr = firstFavoriteAddr(filter, addrs)
+               addr = firstSupportedAddr(filter, addrs)
                if addr == nil {
                        // should not happen
                        err = &AddrError{"LookupHost returned no suitable address", addrs[0]}
index 0b8c388f15d6ccf6883c164d7efcf378b622228b..d44a88c965d726bdb170aafbede7e1d25fcbf4f5 100644 (file)
@@ -98,23 +98,6 @@ func favoriteAddrFamily(net string, raddr, laddr sockaddr, mode string) int {
        return syscall.AF_INET6
 }
 
-func firstFavoriteAddr(filter func(IP) IP, addrs []string) (addr IP) {
-       if filter == anyaddr {
-               // We'll take any IP address, but since the dialing code
-               // does not yet try multiple addresses, prefer to use
-               // an IPv4 address if possible.  This is especially relevant
-               // if localhost resolves to [ipv6-localhost, ipv4-localhost].
-               // Too much code assumes localhost == ipv4-localhost.
-               addr = firstSupportedAddr(ipv4only, addrs)
-               if addr == nil {
-                       addr = firstSupportedAddr(anyaddr, addrs)
-               }
-       } else {
-               addr = firstSupportedAddr(filter, addrs)
-       }
-       return
-}
-
 func firstSupportedAddr(filter func(IP) IP, addrs []string) IP {
        for _, s := range addrs {
                if addr := filter(ParseIP(s)); addr != nil {
@@ -293,7 +276,7 @@ func hostPortToIP(net, hostport string) (ip IP, iport int, err os.Error) {
                                err = err1
                                goto Error
                        }
-                       addr = firstFavoriteAddr(filter, addrs)
+                       addr = firstSupportedAddr(filter, addrs)
                        if addr == nil {
                                // should not happen
                                err = &AddrError{"LookupHost returned no suitable address", addrs[0]}