我们需要将 IPv4 套接字移植到 IPv4 和 IPv6。 我想创建一个将绑定(bind)在 6addr_any 中的服务器 IPv6 套接字。 我知道它可以处理 IPv4 请求,但我的问题是我们提供了几个绑定(bind)选项,例如其中之一是绑定(bind)到地址。
我们希望能够处理 IPv4 和 IPv6 请求,这可以通过仅使用 1 个套接字来完成。
何时需要将套接字绑定(bind)到 ipv4 地址,它会改变吗? 我们需要打开新的 ipv4 套接字吗?
有什么建议如何支持它吗?
我希望我的问题有一定道理。 欢迎询问更多详情
最佳答案
如果您使用 V6ONLY=0
创建 IPv6 套接字并绑定(bind)到通配符 IPv6 地址,那么您可以在该单个套接字上同时接受 IPv4 和 IPv6 连接。
如果你想绑定(bind)到显式地址,那么你需要多个套接字:每个地址一个。为要绑定(bind)到的 IPv4 地址创建 IPv4 套接字并为 IPv6 地址创建 IPv6 套接字可能是最简单的方法,尽管您可以对所有内容使用 IPv6 套接字。
在最后一种情况下,您为每个 IPv4 地址创建一个 V6ONLY=0
的 IPv6 套接字,并将其绑定(bind)到映射地址。对于 IPv4 地址 aaa.bbb.ccc.ddd
,您将绑定(bind)到 IPv6 地址 ::ffff:aaa.bbb.ccc.ddd
(如果您的实现接受此表示法)或else to ::ffff:wwxx:yyzz
,其中ww
是aaa
的十六进制表示,xx
是十六进制bbb
等版本
关于Linux:in6addr_any 并绑定(bind)到特定的 IPv4 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20516423/