我不能使用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_addr
是h_addrlist_[0]
的同义词,而h_length
是所有地址的长度。
也许我没有充分理解你的问题?
关于c - 是否可以确保gethostbyname返回具有IPv4地址的托管结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2783581/