connect() to the IPv6 loopback address can fail with EACCES on Linux if IPv6 is disabled on the lo interface, and causes getaddrinfo to fail without returning IPv4 addresses. It should be treated as if IPv6 is disabled. echo 1 >/proc/sys/net/ipv6/conf/lo/disable_ipv6 struct addrinfo hints, *res = NULL; hints.ai_family = PF_UNSPEC; hints.ai_flags = AI_ADDRCONFIG; getaddrinfo("192.168.1.1", "80", &hints, &res); strace: ======start======= socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_UDP) = 14 connect(14, {sa_family=AF_INET, sin_port=htons(65535), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 close(14) = 0 socket(AF_INET6, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_UDP) = 14 connect(14, {sa_family=AF_INET6, sin6_port=htons(65535), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = -1 EACCES (Permission denied) close(14) = 0 writev(2, [{iov_base="[warn] getaddrinfo: Permission denied\n", iov_len=38}, {iov_base=NULL, iov_len=0}], 2) = 38 ======end=========