]> Cypherpunks repositories - gostls13.git/commit
net: make Dial("tcp", ln.Addr().String()) work even with bad IPv6 config
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 7 Jun 2017 21:01:48 +0000 (21:01 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 8 Jun 2017 22:20:17 +0000 (22:20 +0000)
commit78cf0e56ce5372ed3bf81e41e4ab23f68d3eaa77
treed61bde4e5b2ada25cbbe4be22d30792d2cb6dd5e
parentd8a7990ffad9aebfb7261df7afb3049da4a09986
net: make Dial("tcp", ln.Addr().String()) work even with bad IPv6 config

Some machines can be configured (or came/come configured) in such a
state that IPv6 only half works: you can bind on [::]:n but not
connect back to it.

This implements a fallback such that it's guaranteed that this pattern
works:

   ln, err := Listen("tcp", ":0")
   ...
   addr := ln.Addr().String() // "[::]:n"
   c, err := Dial("tcp", addr)

... which is also now tested. It will first try to dial "[::]:n", as
before, but if that dial fails, it will also try "0.0.0.0:n".

Fixes #18806 (contains more details)
Fixes #20611 (I was going to fix nacl later, but it was easy enough)

Change-Id: I1107eb197e902ae8185c781ad1bc4e2bc61d1f4c
Reviewed-on: https://go-review.googlesource.com/45088
Reviewed-by: Paul Marks <pmarks@google.com>
src/net/dial_test.go
src/net/ipsock.go
src/syscall/net_nacl.go