net: fix lookup of AAAA-only hosts without cgo

Fixes #3762.

R=rsc
CC=golang-dev
https://golang.org/cl/6303106
This commit is contained in:
Michael Stapelberg 2012-06-25 17:32:39 -04:00 committed by Russ Cox
parent ec6b5123fe
commit dfbd42e4f8
1 changed files with 17 additions and 11 deletions

View File

@ -237,24 +237,30 @@ func goLookupIP(name string) (addrs []IP, err error) {
} }
var records []dnsRR var records []dnsRR
var cname string var cname string
cname, records, err = lookup(name, dnsTypeA) var err4, err6 error
if err != nil { cname, records, err4 = lookup(name, dnsTypeA)
return
}
addrs = convertRR_A(records) addrs = convertRR_A(records)
if cname != "" { if cname != "" {
name = cname name = cname
} }
_, records, err = lookup(name, dnsTypeAAAA) _, records, err6 = lookup(name, dnsTypeAAAA)
if err != nil && len(addrs) > 0 { if err4 != nil && err6 == nil {
// Ignore error because A lookup succeeded. // Ignore A error because AAAA lookup succeeded.
err = nil err4 = nil
} }
if err != nil { if err6 != nil && len(addrs) > 0 {
return // Ignore AAAA error because A lookup succeeded.
err6 = nil
} }
if err4 != nil {
return nil, err4
}
if err6 != nil {
return nil, err6
}
addrs = append(addrs, convertRR_AAAA(records)...) addrs = append(addrs, convertRR_AAAA(records)...)
return return addrs, nil
} }
// goLookupCNAME is the native Go implementation of LookupCNAME. // goLookupCNAME is the native Go implementation of LookupCNAME.