2011-06-28 87 views
0

地址族會是什麼下面的代碼的輸出:檢查套接字編程

char peer_ip[16]; 
inet_pton(AF_INET,"127.0.0.1",peer_ip); 

現在我已經在網絡形式peer_ip。我如何檢查地址族是什麼?我現在不能使用inet_ntop。有什麼辦法嗎? getaddrinfo在這種情況下工作嗎?

+0

您無法從緩衝區恢復地址系列。 –

回答

0

你必須飛得更高和使用getaddrinfo代替inet_pton(不處理IPv6範圍)而不是不透明的緩衝區使用struct sockaddr_storagestruct sockaddr指針,那麼您可以立即根據需要確定ss.ss_familysa.sa_family的家族。

3

您不能 - inet_pton讓你無論是struct in_addr(用於AF_INET)或struct in6_addr(用於AF_INET6),這取決於你在什麼傳遞地址族,如果你認爲這些結構是內存的二進制塊,沒有你可以從他們那裏恢復地址族,你只需要跟蹤你有什麼類型的二進制blob。

你真的應該使用struct in_addr,而不是作爲​​傳遞到inet_pton值:

struct in_addr peer_ip; 
inet_pton(AF_INET, "127.0.0.1", &peer_ip);