gpt4 book ai didi

使用 sockaddr_storage 从 IP 版本独立创建和连接套接字

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:41 27 4
gpt4 key购买 nike

我正在编写一个可以同时连接到 IPv4 和 IPv6 地址的客户端,使代码尽可能通用。我使用 getaddrinfo 函数将 IP 地址字符串传递到该函数,并从中获得地址族(此时我知道它是 IPv4 还是 IPv6)。现在我需要将该地址和端口绑定(bind)到 sockaddr 结构。我读过,为了使其通用,我应该使用 sockaddr_storage,然后通过将其转换为 sockaddr 来使用它,但我不明白如何使用连接所需的地址和端口填充 sockaddr_storage。

感谢您的关注。

注意。我希望它能在 UNIX 上运行。

最佳答案

POSIX specification只说 sockaddr_storage 应该是

  • Large enough to accommodate all supported protocol-specific address structures

  • Aligned at an appropriate boundary so that pointers to it can be cast as pointers to protocol-specific address structures and used to access the fields of those structures without alignment problems

The sockaddr_storage structure shall contain at least the following members:

sa_family_t ss_family

有些注释说所有 sockaddr 结构的 family 结构成员将位于同一位置,但仅此而已。

所以我会说使用它的“最佳”方法是为 IPv4 和 IPv6 提供特殊情况,填充正确的 sockaddr_insockaddr_in6 结构,然后 memcpy 将它们放入 sockaddr_storage 结构中,以后可以使用。

关于使用 sockaddr_storage 从 IP 版本独立创建和连接套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43140607/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com