地址族會是什麼下面的代碼的輸出:檢查套接字編程
char peer_ip[16];
inet_pton(AF_INET,"127.0.0.1",peer_ip);
現在我已經在網絡形式peer_ip。我如何檢查地址族是什麼?我現在不能使用inet_ntop。有什麼辦法嗎? getaddrinfo在這種情況下工作嗎?
地址族會是什麼下面的代碼的輸出:檢查套接字編程
char peer_ip[16];
inet_pton(AF_INET,"127.0.0.1",peer_ip);
現在我已經在網絡形式peer_ip。我如何檢查地址族是什麼?我現在不能使用inet_ntop。有什麼辦法嗎? getaddrinfo在這種情況下工作嗎?
你必須飛得更高和使用getaddrinfo
代替inet_pton
(不處理IPv6範圍)而不是不透明的緩衝區使用struct sockaddr_storage
和struct sockaddr
指針,那麼您可以立即根據需要確定ss.ss_family
或sa.sa_family
的家族。
您不能 - 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);
您無法從緩衝區恢復地址系列。 –