IPv6套接字创建

时间:2011-06-14 12:52:47

标签: sockets ipv6

我正在实施双栈模式以支持IPv4和IPv6。 如果我正在创建一个IPv6套接字并监听它,它是否也接受来自IPv4套接字的连接?

3 个答案:

答案 0 :(得分:3)

是的,除非操作系统另有配置,例如在Linux中net.ipv6.bindv6only=1,或者设置IPV6_V6ONLY套接字选项。

答案 1 :(得分:2)

仅当系统具有dual-stack实施时。大多数现代系统都可以,但旧版Windows和OpenBSD却没有。你不应该依赖于此。获取IPV6_V6ONLY套接字选项的值,如果它为零,则需要为IPv4打开第二个套接字。

使用双栈套接字时,IPv4地址表示为::ffff:[IPv4 address];例如::ffff:127.0.0.1(这对应于::ffff:7f00:1;为了便于阅读,它通常以点十进制表示法打印。)

答案 2 :(得分:1)

根据Microsoft,即使在双堆栈模式下,默认情况下 IPV6_V6ONLY 设置为false - 但您可以通过setsockopt(2)调用启用它。 FWIW,Windows的“旧版本”(单栈)包括仍然广泛使用的Windows XP(比Vista早的版本)。

因此,如果你在Windows上,你应该尝试禁用IPV6_V6ONLY并查看它是否成功。我不知道这是否是其他单栈实现的好答案。