我有以下代码片段,它只是试图获取服务器地址的地址族。 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在同一时间点工作正常。
错误: 验证服务器地址时出错:提供的hostname或servname,或者未知。 错误代码:8(EAI_NONAME)。
我确信主机名是有效的,即使主机名有效且可以ping通,getaddrinfo()可能会失败的情况也是如此。
我知道getaddrinfo()返回addrinfo结构列表,因此可以返回多个地址系列。但我只对这里的失败案例感兴趣。
由于