如何在代码中使用gethostbyname两次

时间:2012-11-06 20:41:25

标签: c sockets ip-address gethostbyname

我有这段代码:

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的地址。怎么了?我做错了什么?

1 个答案:

答案 0 :(得分:4)

gethostbynamegethostbyaddr是不再使用的旧功能。

对于他们的POSIX (2004) description

  

gethostbyaddr()和gethostbyname()函数可能会返回指向静态数据的指针,这些指针可能会被后续调用这些函数所覆盖。

这意味着您需要在后续调用之前从返回值中复制所需的部分。

此外:

  

gethostbyaddr()和gethostbyname()函数可能会在将来的版本中撤消。

事实上,他们已经不在POSIX 2008中了。

替换是:

  

getaddrinfo()getnameinfo()函数优先于gethostbyaddr()和gethostbyname()函数。