我有以下代码片段,它只是试图获取服务器地址的地址族。srv_addr 是从其他地方传递给这段代码的。
struct addrinfo dinfo, *dptr = NULL;
int error;
memset(&dinfo, 0, sizeof(dinfo));
dinfo.ai_family = AF_UNSPEC;
error = getaddrinfo(srv_addr, NULL, &dinfo, &dptr);
if (error) {
printf("error in validating server address: %s",
gai_strerror(error));
return -1;
}
srv_addr 可以是主机名(字符串)或 IPv4 或 IPv6 地址。
如果 srv_addr 是数字地址,代码工作正常。
如果 srv_addr 是主机名,有时 getaddrinfo() 会失败,尽管 ping 在同一时间点工作正常。
错误:验证服务器地址时出错:提供主机名或服务名,或未知。错误代码:8 (EAI_NONAME)。
我确信主机名是有效的,即使主机名有效且可 ping,getaddrinfo() 可能会失败的情况是什么。
我知道 getaddrinfo() 返回 addrinfo 结构列表,因此可以返回多个地址族。但我只对这里的失败案例感兴趣。
谢谢