For #61095.
Change-Id: Iff9f19f6f2eada739967774b50d949f9c5893ee0
Cq-Include-Trybots: luci.golang.try:gotip-darwin-amd64_14,gotip-freebsd-amd64
Reviewed-on: https://go-review.googlesource.com/c/go/+/618015
TryBot-Bypass: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
AI_V4MAPPED = 0x800
AI_MASK = 0x1407
- EAI_AGAIN = 2
- EAI_NODATA = 7
- EAI_NONAME = 8
- EAI_SERVICE = 9
- EAI_SYSTEM = 11
- EAI_OVERFLOW = 14
+ EAI_ADDRFAMILY = 1
+ EAI_AGAIN = 2
+ EAI_NODATA = 7
+ EAI_NONAME = 8
+ EAI_SERVICE = 9
+ EAI_SYSTEM = 11
+ EAI_OVERFLOW = 14
NI_NAMEREQD = 4
)
"errors"
"internal/bytealg"
"net/netip"
+ "runtime"
"syscall"
"unsafe"
return nil, newDNSError(err, name, "")
case _C_EAI_NONAME, _C_EAI_NODATA:
return nil, newDNSError(errNoSuchHost, name, "")
+ case _C_EAI_ADDRFAMILY:
+ if runtime.GOOS == "freebsd" {
+ // FreeBSD began returning EAI_ADDRFAMILY for valid hosts without
+ // an A record in 13.2. We previously returned "no such host" for
+ // this case.
+ //
+ // https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=273912
+ return nil, newDNSError(errNoSuchHost, name, "")
+ }
+ fallthrough
default:
return nil, newDNSError(addrinfoErrno(gerrno), name, "")
}
#define EAI_NODATA -5
#endif
+// If nothing else defined EAI_ADDRFAMILY, make sure it has a value.
+#ifndef EAI_ADDRFAMILY
+#define EAI_ADDRFAMILY -9
+#endif
+
// If nothing else defined EAI_OVERFLOW, make sure it has a value.
#ifndef EAI_OVERFLOW
#define EAI_OVERFLOW -12
import "unsafe"
const (
- _C_AF_INET = C.AF_INET
- _C_AF_INET6 = C.AF_INET6
- _C_AF_UNSPEC = C.AF_UNSPEC
- _C_EAI_AGAIN = C.EAI_AGAIN
- _C_EAI_NODATA = C.EAI_NODATA
- _C_EAI_NONAME = C.EAI_NONAME
- _C_EAI_SERVICE = C.EAI_SERVICE
- _C_EAI_OVERFLOW = C.EAI_OVERFLOW
- _C_EAI_SYSTEM = C.EAI_SYSTEM
- _C_IPPROTO_TCP = C.IPPROTO_TCP
- _C_IPPROTO_UDP = C.IPPROTO_UDP
- _C_SOCK_DGRAM = C.SOCK_DGRAM
- _C_SOCK_STREAM = C.SOCK_STREAM
+ _C_AF_INET = C.AF_INET
+ _C_AF_INET6 = C.AF_INET6
+ _C_AF_UNSPEC = C.AF_UNSPEC
+ _C_EAI_ADDRFAMILY = C.EAI_ADDRFAMILY
+ _C_EAI_AGAIN = C.EAI_AGAIN
+ _C_EAI_NODATA = C.EAI_NODATA
+ _C_EAI_NONAME = C.EAI_NONAME
+ _C_EAI_SERVICE = C.EAI_SERVICE
+ _C_EAI_OVERFLOW = C.EAI_OVERFLOW
+ _C_EAI_SYSTEM = C.EAI_SYSTEM
+ _C_IPPROTO_TCP = C.IPPROTO_TCP
+ _C_IPPROTO_UDP = C.IPPROTO_UDP
+ _C_SOCK_DGRAM = C.SOCK_DGRAM
+ _C_SOCK_STREAM = C.SOCK_STREAM
)
type (
)
const (
- _C_AF_INET = syscall.AF_INET
- _C_AF_INET6 = syscall.AF_INET6
- _C_AF_UNSPEC = syscall.AF_UNSPEC
- _C_EAI_AGAIN = unix.EAI_AGAIN
- _C_EAI_NONAME = unix.EAI_NONAME
- _C_EAI_SERVICE = unix.EAI_SERVICE
- _C_EAI_NODATA = unix.EAI_NODATA
- _C_EAI_OVERFLOW = unix.EAI_OVERFLOW
- _C_EAI_SYSTEM = unix.EAI_SYSTEM
- _C_IPPROTO_TCP = syscall.IPPROTO_TCP
- _C_IPPROTO_UDP = syscall.IPPROTO_UDP
- _C_SOCK_DGRAM = syscall.SOCK_DGRAM
- _C_SOCK_STREAM = syscall.SOCK_STREAM
+ _C_AF_INET = syscall.AF_INET
+ _C_AF_INET6 = syscall.AF_INET6
+ _C_AF_UNSPEC = syscall.AF_UNSPEC
+ _C_EAI_ADDRFAMILY = unix.EAI_ADDRFAMILY
+ _C_EAI_AGAIN = unix.EAI_AGAIN
+ _C_EAI_NONAME = unix.EAI_NONAME
+ _C_EAI_SERVICE = unix.EAI_SERVICE
+ _C_EAI_NODATA = unix.EAI_NODATA
+ _C_EAI_OVERFLOW = unix.EAI_OVERFLOW
+ _C_EAI_SYSTEM = unix.EAI_SYSTEM
+ _C_IPPROTO_TCP = syscall.IPPROTO_TCP
+ _C_IPPROTO_UDP = syscall.IPPROTO_UDP
+ _C_SOCK_DGRAM = syscall.SOCK_DGRAM
+ _C_SOCK_STREAM = syscall.SOCK_STREAM
)
type (