以下代码的输出是什么:
char peer_ip[16];
inet_pton(AF_INET,"127.0.0.1",peer_ip);
现在我有网络形式的peer_ip。我怎样才能查看地址族是什么?我现在不能使用inet_ntop。有什么办法吗?在这种情况下getaddrinfo会工作吗???
答案 0 :(得分:3)
您不能 - inet_pton
为您提供struct in_addr
(针对AF_INET
)或struct in6_addr
(针对AF_INET6
),具体取决于地址你传入的家庭。如果你认为这些结构是二进制blob的内存,你无法从它们恢复地址族,你只需要跟踪你有什么类型的二进制blob。
您应该使用struct in_addr
,而不是char[16]
作为传递给inet_pton
的值:
struct in_addr peer_ip;
inet_pton(AF_INET, "127.0.0.1", &peer_ip);
答案 1 :(得分:0)
你必须走得更高并使用getaddrinfo
而不是inet_pton
(不处理IPv6范围)而不是使用struct sockaddr_storage
和struct sockaddr
指针的不透明缓冲区然后,您可以根据需要立即使用ss.ss_family
或sa.sa_family
确定家庭。