• Russ Cox's avatar
    undo CL 4557058 / b4c2ffae7034 · 16dbf218
    Russ Cox authored
    Using the getaddrinfo order is only okay if we
    are smart enough to try multiple addresses in Dial.
    Since the code does not do that, we must make
    the right first choice, regardless of what getaddrinfo
    does, and more often that not that means using the
    IPv4 address, even on IPv6 systems.  With the CL
    applied, gotest fails in package net on OS X.
    
    helix.cam=; gotest
    ...
    --- FAIL: net.TestDialGoogleIPv4 (1.05 seconds)
            -- 74.125.226.179:80 --
            -- www.google.com:80 --
            Dial("tcp", "", "www.google.com:80") = _, dial tcp [2001:4860:800f::69]:80: address family not supported by protocol family
            -- 74.125.226.179:http --
            -- www.google.com:http --
            Dial("tcp", "", "www.google.com:http") = _, dial tcp [2001:4860:800f::69]:80: address family not supported by protocol family
            -- 074.125.226.179:0080 --
            -- [::ffff:74.125.226.179]:80 --
            -- [::ffff:4a7d:e2b3]:80 --
            -- [0:0:0:0:0000:ffff:74.125.226.179]:80 --
            -- [0:0:0:0:000000:ffff:74.125.226.179]:80 --
            -- [0:0:0:0:0:ffff::74.125.226.179]:80 --
    FAIL
    gotest: "./6.out" failed: exit status 1
    
    ««« original CL description
    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
    
    »»»
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/4532101
    16dbf218
iprawsock.go 8.59 KB