2011-06-28 52 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);