在套接字编程中检查地址族

时间:2011-06-28 16:24:13

标签: c ipv6

以下代码的输出是什么:

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

现在我有网络形式的peer_ip。我怎样才能查看地址族是什么?我现在不能使用inet_ntop。有什么办法吗?在这种情况下getaddrinfo会工作吗???

2 个答案:

答案 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_storagestruct sockaddr指针的不透明缓冲区然后,您可以根据需要立即使用ss.ss_familysa.sa_family确定家庭。