Linux:in6addr_any并绑定到特定的IPv4地址

时间:2013-12-11 10:18:54

标签: linux sockets ipv6

我们需要将IPv4套接字移植到IPv4和IPv6的。 我想创建一个服务器IPv6套接字,它将绑定in6addr_any。 我知道它可以处理IPv4请求但我的问题是我们提供了几个绑定选项,其中一个例如绑定到地址。

我们希望能够处理IPv4和IPv6请求,这可以通过仅使用1个套接字来完成。

是否需要将套接字绑定到ipv4地址时会发生变化? 我们需要打开新的ipv4套接字吗?

任何建议如何支持它?

我希望我的问题有道理。 随意询问更多细节

1 个答案:

答案 0 :(得分:1)

如果使用V6ONLY=0创建IPv6套接字并绑定到通配符IPv6地址,则可以在该单个套接字上接受IPv4和IPv6连接。

如果要绑定到显式地址,则需要多个套接字:每个地址一个。尽管您可以使用IPv6套接字来处理所有内容,但最简单的方法是为要绑定的IPv4地址创建IPv4套接字,为IPv6地址创建IPv6套接字。

在最后一种情况下,为每个IPv4地址创建一个带V6ONLY=0的IPv6套接字,并将其绑定到映射地址。对于IPv4地址aaa.bbb.ccc.ddd,您将绑定到IPv6地址::ffff:aaa.bbb.ccc.ddd(如果您的实现接受此表示法),或者绑定到::ffff:wwxx:yyzz,其中ww是{{1}的十六进制表示形式} {},aaa xx的十六进制版本等