getaddrinfo失败,虽然ping工作正常

时间:2014-06-26 12:21:09

标签: c sockets unix getaddrinfo

我有以下代码片段,它只是试图获取服务器地址的地址族。 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结构列表,因此可以返回多个地址系列。但我只对这里的失败案例感兴趣。

由于

0 个答案:

没有答案