我目前正在开发一个 UDP 套接字应用程序,我需要构建支持,以便 IPV4 和 IPV6 连接可以将数据包发送到服务器。
我希望有人可以帮助我并指出正确的方向;我发现的大部分文档都不完整。如果您能指出 Winsock 和 BSD 套接字之间的任何区别,那也会很有帮助。
提前致谢!
原文由 Charles 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
最好的方法是创建一个也可以接受 IPv4 连接的 IPv6 服务器套接字。为此,请创建一个常规 IPv6 套接字, 关闭 套接字选项
IPV6_V6ONLY
,将其绑定到“任何”地址,然后开始接收。 IPv4 地址将以 IPv4 映射 格式显示为 IPv6 地址。系统之间的主要区别在于
IPV6_V6ONLY
a) 是否可用,以及 b) 默认情况下是打开还是关闭。它在 Linux 上默认关闭(即允许不使用 setsockopt 的双栈套接字),而在大多数其他系统上打开。此外,Windows XP 上的 IPv6 堆栈不支持该选项。在这些情况下,您将需要创建两个单独的服务器套接字,并将它们放入 select 或多个线程中。