0

我有这个代码:

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. 怎么了?我做错了什么?

4

1 回答 1

4

gethostbyname并且gethostbyaddr是不应再使用的旧功能。

对于他们的POSIX (2004) 描述

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

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

此外:

gethostbyaddr() 和 gethostbyname() 函数可能会在未来版本中取消。

事实上,它们不再存在于 POSIX 2008 中。

替代品是:

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

于 2012-11-06T20:48:03.167 回答