diff --git a/src/net/cgo_stub.go b/src/net/cgo_stub.go index a4f6b4b0e8..640f5a4fd6 100644 --- a/src/net/cgo_stub.go +++ b/src/net/cgo_stub.go @@ -31,7 +31,7 @@ func cgoLookupIP(ctx context.Context, network, name string) (addrs []IPAddr, err panic("cgo stub: cgo not available") } -func cgoLookupCNAME(ctx context.Context, name string) (cname string, err error, completed bool) { +func cgoLookupCNAME(ctx context.Context, name string) (cname string, err error) { panic("cgo stub: cgo not available") } diff --git a/src/net/cgo_unix.go b/src/net/cgo_unix.go index 1e170dbc0a..51efee6f87 100644 --- a/src/net/cgo_unix.go +++ b/src/net/cgo_unix.go @@ -297,16 +297,16 @@ func cgoSockaddr(ip IP, zone string) (*_C_struct_sockaddr, _C_socklen_t) { return nil, 0 } -func cgoLookupCNAME(ctx context.Context, name string) (cname string, err error, completed bool) { +func cgoLookupCNAME(ctx context.Context, name string) (cname string, err error) { resources, err := resSearch(ctx, name, int(dnsmessage.TypeCNAME), int(dnsmessage.ClassINET)) if err != nil { - return + return "", err } cname, err = parseCNAMEFromResources(resources) if err != nil { - return "", err, false + return "", err } - return cname, nil, true + return cname, nil } // resSearch will make a call to the 'res_nsearch' routine in the C library diff --git a/src/net/cgo_unix_test.go b/src/net/cgo_unix_test.go index d8233dfaf2..9aaeccc5f0 100644 --- a/src/net/cgo_unix_test.go +++ b/src/net/cgo_unix_test.go @@ -8,6 +8,7 @@ package net import ( "context" + "internal/testenv" "testing" ) @@ -67,3 +68,12 @@ func TestCgoLookupPTRWithCancel(t *testing.T) { t.Error(err) } } + +func TestCgoLookupCNAME(t *testing.T) { + mustHaveExternalNetwork(t) + testenv.SkipFlakyNet(t) + defer dnsWaitGroup.Wait() + if _, err := cgoLookupCNAME(t.Context(), "www.iana.org."); err != nil { + t.Error(err) + } +} diff --git a/src/net/lookup_unix.go b/src/net/lookup_unix.go index 7416cb01f8..86108939cd 100644 --- a/src/net/lookup_unix.go +++ b/src/net/lookup_unix.go @@ -87,8 +87,8 @@ func (r *Resolver) lookupPort(ctx context.Context, network, service string) (int func (r *Resolver) lookupCNAME(ctx context.Context, name string) (string, error) { order, conf := systemConf().hostLookupOrder(r, name) if order == hostLookupCgo { - if cname, err, ok := cgoLookupCNAME(ctx, name); ok { - return cname, err + if cname, err := cgoLookupCNAME(ctx, name); err == nil { + return cname, nil } } return r.goLookupCNAME(ctx, name, order, conf)