为什么这个hostent导致段错误?

时间:2012-04-25 20:40:37

标签: c network-programming hostent

struct hostent *hostName;

struct in_addr ipv4addr;

inet_pton(AF_INET, inet_ntoa(client.sin_addr), &ipv4addr);

hostName = gethostbyaddr(&ipv4addr, sizeof(ipv4addr), AF_INET);

printf("Host name: %s\n", hostName->h_name);

最后一行是段错误。我查找了正确使用hostent,并且msdn文档显示它正在使用这样的确切。什么会导致段错?

1 个答案:

答案 0 :(得分:1)

如果出现错误,gethostbyaddr()函数会返回NULL,我不会在您的代码中看到您检查它。尝试取消引用NULL指针会导致段错误。

您需要以下内容:

if (hostName == NULL) {
  printf("There was an error!\n");
  exit(1);
}

您可以使用herror()函数打印解析程序遇到的实际错误(尽管手册页指示herror()已过时)。