我正在实施双栈模式以支持IPv4和IPv6。 如果我正在创建一个IPv6套接字并监听它,它是否也接受来自IPv4套接字的连接?
答案 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并查看它是否成功。我不知道这是否是其他单栈实现的好答案。