[Bug go/63731] Fallback to netgo does not work
yohei at jp dot ibm.com
gcc-bugzilla@gcc.gnu.org
Thu Nov 20 07:54:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63731
--- Comment #12 from Yohei Ueda <yohei at jp dot ibm.com> ---
"pure-Go goLookupIP" means that goLookupIP is written in Go as usual.
https://code.google.com/p/go/source/browse/src/net/dnsclient_unix.go#364
cgoLookupIP uses getaddrinfo via CGO unless the netgo tag is set.
https://code.google.com/p/go/source/browse/src/net/cgo_unix.go#147
Fallback means that goLookupIP is called when cgoLookup fails with ok == false
in this code.
https://code.google.com/p/go/source/browse/src/net/lookup_unix.go#63
func lookupIP(host string) (addrs []IP, err error) {
addrs, err, ok := cgoLookupIP(host)
if !ok {
addrs, err = goLookupIP(host)
}
return
}
When code that uses LookupHost is compiled with "go build -ldflags '-linkmode
external -extldflags -static' -a -tags netgo", the Go standard library
including cgoLookupIP is rebuilt. In this case, cgoLookupIP always returns ok
== false as defined here.
https://code.google.com/p/go/source/browse/src/net/cgo_stub.go#19
func cgoLookupIP(name string) (addrs []IP, err error, completed bool) {
return nil, nil, false
}
This leads to calling goLookupIP from lookupIP. I called this mechanism
"fallback".
More information about the Gcc-bugs
mailing list