我用来getaddrinfo(3)
从支持 ipv4 和 ipv6 的域获取列表 ip 地址,但本地系统仅支持 ipv4 或同时支持 ipv4 和 ipv6,正如我所期望的,如果系统同时支持 ipv4 和 ipv6getaddrinfo(3)
将查询 ipv4 和 ipv6,如果系统仅支持 ipv4,getaddrinfo(3)
仅查询 ipv4。我尝试设置ai_flags
为AI_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_family
为AF_INET
。
用于AF_INET
IPv4,AF_INET6
用于 IPv6。