我发誓我以前见过这个问题,但我想不出神奇的搜索字符串来帮我找到它:
我使用以下命令创建了一个用于侦听的套接字:
s = socket()...
getaddrinfo("::1",...);
bind()...最后,我得到一个绑定到"::1“的IPV6套接字和一个绑定到"0.0.0.0”的IPV4套接字。我希望将IPV4套接字绑定到"127.0.0.1“。为什么会发生这种情况,我如何修复它,使其只接受ipv4套接字上的本地主机连接?
这是在Win7上,我之前已经关闭了IPV6_V6ONLY。
发布于 2010-10-28 09:14:37
getaddrinfo()和bind()一次只能在一个IP上操作。如果您不指定自己的显式绑定,则IPv4将绑定到0.0.0.0。听起来好像您只为双堆栈套接字的IPv6部分调用了bind()一次,而忽略了它的IPv4部分。我不知道这是否有效,但尝试调用bind()两次,一次使用IPv6 "::1“地址,另一次使用IPv6 "::FFFF:127.0.0.1”地址(请记住,双堆栈套接字上的IPv4地址必须表示为IPv6映射的IPv6地址)。
https://stackoverflow.com/questions/4037403
复制相似问题