地址族会是什么下面的代码的输出:检查套接字编程
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);
您无法从缓冲区恢复地址系列。 –