bind()到Windows 7中的IPv6地址失败,错误代码:: WSAEADDRNOTAVAIL(10049)

时间:2011-05-17 07:07:02

标签: windows-7 bind ipv6

我正在尝试使用两台Windows-7机器设置一个私有ipv6网络来测试我的应用程序。我编写了一个示例代码来测试socket apis。我创建了一个IPv6套接字。当我尝试使用链接本地地址(我从 ipconfig 命令获取)绑定时,错误代码为10049。

请告知,为什么带有Ipv6地址的 bind 在windows-7机器中出现故障?

1 个答案:

答案 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个)地址。