这个问题可以看作是一个姐妹问题前一个 https://stackoverflow.com/questions/2455762/why-cant-i-bind-ipv6-socket-to-a-linklocal-address我自己发布的。非常繁琐的是,当你想将链路本地地址绑定到 IPv6 套接字时,需要设置sin6_scope_id
的领域sockaddr_in6
结构。我想知道是否有人可以按照良好实践提供解决方案。
IPv6 链路本地地址在节点上不是唯一的,它仅对于 NIC 来说是唯一的,这就是您必须指定范围 ID 的原因。换句话说,多个适配器具有完全相同的 IPv6 地址是完全有效的。
这意味着您应该将范围 ID 或合适的文本形式 (%eth0, %1) 作为输入,您可以将其传递给getaddrinfo()
.
一种方法是获取 IPv6 链路本地地址,枚举接口,如果只有一个匹配,则使用该接口,如果多个匹配,则使用接口列表来退出,并让用户以完整形式指定哪个接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)