我有这段代码:
struct hostent *host;
struct hostent *serverHost;
if ((host = gethostbyname(param.ipadress)) == NULL)
{
return -1;
}
if ((serverHost = gethostbyname(param.dnsserver)) == NULL)
{
return -1;
}
现在当我尝试host->h_addr
时,它包含来自param.dnsserver
的地址。怎么了?我做错了什么?
答案 0 :(得分:4)
gethostbyname
和gethostbyaddr
是不再使用的旧功能。
对于他们的POSIX (2004) description:
gethostbyaddr()和gethostbyname()函数可能会返回指向静态数据的指针,这些指针可能会被后续调用这些函数所覆盖。
这意味着您需要在后续调用之前从返回值中复制所需的部分。
此外:
gethostbyaddr()和gethostbyname()函数可能会在将来的版本中撤消。
事实上,他们已经不在POSIX 2008中了。
替换是:
getaddrinfo()
和getnameinfo()
函数优先于gethostbyaddr()和gethostbyname()函数。