我正在尝试使用两台Windows-7机器设置一个私有ipv6网络来测试我的应用程序。我编写了一个示例代码来测试socket apis。我创建了一个IPv6套接字。当我尝试使用链接本地地址(我从 ipconfig 命令获取)绑定时,错误代码为10049。
请告知,为什么带有Ipv6地址的 bind 在windows-7机器中出现故障?
答案 0 :(得分:2)
如果您使用的是链接本地IPv6地址,则可能需要在sin6_scope_id
结构中设置sockaddr_in6
字段,以指示您要侦听的接口。链接本地地址不明确,因为every interface must have a link-local address assigned,它们都使用相同的前缀。 (fe80::/64
)
你应该bind()
你的侦听套接字到未指定的地址(全零或::
)所以这不是问题,但它仍然是发送方的问题。如果未指定sin6_scope_id
,系统将不知道要将数据包发送到哪个接口。
为了避免此问题,最好设置一个router advertisements的IPv6路由器,这样您就可以获得global unicast(或至少unique local个)地址。