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

发布于 2024-11-17 08:15:57 字数 196 浏览 1 评论 0原文

以下代码的输出是什么:

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

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

what will be the output of the following code :

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

now I have peer_ip in network form. How can I check what is the address family ??? I cannot use inet_ntop now. Is there any way ?? Will getaddrinfo work in this case ???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暮倦 2024-11-24 08:15:57

你不能 - 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);

You can't—inet_pton gives you either a struct in_addr (for AF_INET) or a struct in6_addr (for AF_INET6), depending on what address family you pass in. If you consider these structures to be binary blobs of memory, there's no way you can recover the address family from them, you just have to keep track of what type of binary blob you have.

You should really be using a struct in_addr, not a char[16] as the value passed into inet_pton:

struct in_addr peer_ip;
inet_pton(AF_INET, "127.0.0.1", &peer_ip);
中二柚 2024-11-24 08:15:57

您必须走得更高,使用 getaddrinfo 而不是 inet_pton (它不处理 IPv6 范围),并且使用 struct sockaddr_storage 而不是不透明缓冲区和 struct sockaddr 指针,那么您可以根据需要立即确定使用 ss.ss_family 或 sa.sa_family 的系列。

You have to go higher up and use getaddrinfo instead of inet_pton (which doesn't handle IPv6 scopes) and instead of opaque buffers use struct sockaddr_storage and struct sockaddr pointers then you can immediately determine the family with ss.ss_family or sa.sa_family as appropriate.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文