我不能使用getaddrinfo(...)来解析主机名,因此必须坚持gethostbyname(...)
gethostbyname(...)函数是否保证在成功时返回仅包含IPv4(AF_INET)地址的宿主结构,以便以下代码始终指向IPv4地址:

int resolve(const char *name, struct in_addr *addr) {

    struct hostent *he = gethostbyname(name);

    if (!he)
        return 1;

    memcpy(addr,he->h_addr_list[0],4);

    return 0;
}

最佳答案

不,gethostbyname()可以返回IPV4(标准点)或IPV6(标准冒号,或点)符号,at least on Linux。你需要处理这个问题。我认为它的各种实现只返回IPV4(例如PHP),但是我使用过的每个C平台都可以并且都将返回这两个。
如果您的应用程序仅限于IPV4,则不太难确定您正在处理IPV6,如果用户没有合适的接口连接到远程主机,则会出错。即使你的应用同时支持这两种功能,用户的网关支持什么?
超过三个.或存在:。。它的IPV6。
编辑
h_addrh_addrlist_[0]的同义词,而h_length是所有地址的长度。
也许我没有充分理解你的问题?

关于c - 是否可以确保gethostbyname返回具有IPv4地址的托管结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2783581/

10-12 16:54