我目前正在将一个大程序从IPv4升级到IPv6。
在执行多个setsockopt的部分,我不知道如何为接口设置特定的源IP。
我这样做是为了设置接口的索引:
setsockopt(m_oClientSocket, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *) &uiInterfaceIndex,
sizeof(uiInterfaceIndex)如何选择IP?由内核原生的吗?
谢谢
发布于 2017-08-02 18:40:48
如果您想使用特定的源地址,您可以使用bind()调用,就像使用IPv4一样。
如果想让内核决定使用哪个源地址,请不要使用bind()或绑定到未指定的地址。IPv4也是如此,但是您可能没有注意到,因为您以前没有使用过具有多个IPv4地址的系统。它们并不常见,但它们确实存在:)
IPv4的未指定地址是0.0.0.0,IPv6的未指定地址是::。在这两种情况下,都是“全零”地址。
如果您想了解内核如何选择地址的详细信息,请查看RFC6724。适用的规则有很多。一开始理解起来可能有点复杂,但其想法是内核应该选择一个能正常工作的地址。
https://stackoverflow.com/questions/45457126
复制相似问题