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文档显示它正在使用这样的确切。什么会导致段错?
答案 0 :(得分:1)
如果出现错误,gethostbyaddr()
函数会返回NULL
,我不会在您的代码中看到您检查它。尝试取消引用NULL
指针会导致段错误。
您需要以下内容:
if (hostName == NULL) {
printf("There was an error!\n");
exit(1);
}
您可以使用herror()
函数打印解析程序遇到的实际错误(尽管手册页指示herror()
已过时)。