我正在实现双栈模式以支持IPv4和IPv6。 如果我创建一个IPv6套接字并在其上进行监听,它是否也会接受IPv4套接字的连接?
我正在实现双栈模式以支持IPv4和IPv6。如果我创建一个IPv6套接字并开始监听它,是否能够接受来自IPv4套接字的连接?
net.ipv6.bindv6only=1
,或者您设置了IPV6_V6ONLY
套接字选项。 ::ffff:[IPv4地址] ;例如, ::ffff:127.0.0.1 (这对应于 ::ffff:7f00:1 ;仅出于可读性的考虑,通常以点十进制表示法打印)。
根据微软的说法,在双栈模式下,默认情况下IPV6_V6ONLY被设置为false - 但你可以通过setsockopt(2)调用来启用它。值得一提的是,“旧版本”的Windows(单栈)包括仍广泛使用的Windows XP(任何比Vista旧的版本)。
因此,如果你在Windows上,应该尝试禁用IPV6_V6ONLY,看看是否成功。我不知道这是否适用于其他单栈实现。
SocketOptionName.IPv6Only
设置为false
,否则它不会在IPv6套接字上接受IPv4连接。例如:listener_socket.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);
- j.w.r