2012-04-25 102 views
0
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文檔顯示它正在被使用。什麼會導致段錯誤?這個hostent爲什麼會導致段錯誤?

+0

也許gethostbyaddre resturns NULL和解除引用NULL會導致段錯誤;或者hostName-> h_name爲NULL,然後printf()爲NULL segfaults。 – 2012-04-25 20:43:52

回答

1

如果出現錯誤,gethostbyaddr()函數返回NULL,我沒有看到您在代碼中檢查該函數。試圖取消引用NULL指針會導致段錯誤。

你需要的東西,如:

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

您可以使用herror()函數打印出由解析遇到的實際錯誤(儘管手冊頁指出herror()是過時的)。

相關問題