我正在尝试使用两台 windows-7 机器设置一个私有(private) ipv6 网络来测试我的应用程序。我已经编写了一个示例代码来测试套接字 api。我创建了一个 IPv6 套接字。当我尝试使用链接本地地址(我从 ipconfig 命令获得)绑定(bind) 时,错误代码是 10049。
请告知,为什么在 windows-7 机器上 bind 与 Ipv6 地址失败?
最佳答案
如果您使用的是链路本地 IPv6 地址,您可能需要在 sockaddr_in6
结构中设置 sin6_scope_id
字段以指示您要在哪个接口(interface)上收听.链接本地地址不明确,因为 every interface must have a link-local address assigned , 它们都使用相同的前缀。 (fe80::/64
)
你可能应该bind()
你的监听套接字到未指定的地址(全零或::
)所以这不是问题,但它仍然会对发送方来说是个问题。如果您不指定 sin6_scope_id
,系统将不知道在哪个接口(interface)上发送数据包。
为避免此问题,最好设置一个执行 router advertisements 的 IPv6 路由器。 , 所以你可以得到 global unicast (或者至少是 unique local )地址。
关于windows-7 - 将 () 绑定(bind)到 Windows 7 中的 IPv6 地址失败,错误代码::WSAEADDRNOTAVAIL (10049),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6027401/