getaddrinfo() 同时返回 ipv4 和 ipv6,而本地系统仅返回 ipv4

getaddrinfo() 同时返回 ipv4 和 ipv6,而本地系统仅返回 ipv4

我用来getaddrinfo(3)从支持 ipv4 和 ipv6 的域获取列表 ip 地址,但本地系统仅支持 ipv4 或同时支持 ipv4 和 ipv6,正如我所期望的,如果系统同时支持 ipv4 和 ipv6getaddrinfo(3)将查询 ipv4 和 ipv6,如果系统仅支持 ipv4,getaddrinfo(3)仅查询 ipv4。我尝试设置ai_flagsAI_ADDRCONFIG,但它仍然查询 ipv4 和 ipv6,而系统仅支持 ipv4。我应该怎么做

这是我的代码:

struct addrinfo hint, *res = NULL, *p = NULL;
int err;
ACE_OS::memset(&hint, 0, sizeof hint);
hint.ai_family = AF_UNSPEC;
hint.ai_socktype = SOCK_STREAM;
hint.ai_flags = AI_ADDRCONFIG;
err = ACE_OS::getaddrinfo(hostname.c_str() ,"http", &hint, &res);

答案1

如果您知道只需要 IPv4,请设置ai_familyAF_INET

用于AF_INETIPv4,AF_INET6用于 IPv6。

相关内容