1
0
mirror of https://github.com/golang/go synced 2024-11-22 01:54:42 -07:00

net: name-based destination address selection

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
This commit is contained in:
Christopher Wedgwood 2011-05-31 11:40:11 -04:00 committed by Russ Cox
parent 91cc1e6b77
commit 50effb654c
2 changed files with 2 additions and 19 deletions

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

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