2017-08-02 120 views
0

我目前正在将大型程序从IPv4升级到IPv6。如何在同一接口上绑定多个IPv6地址时将特定IP设置为套接字

在执行多个setsockopt的部分,我不知道如何设置特定的源IP到接口。

我没有这个设置界面的指数:

setsockopt(m_oClientSocket, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char *) &uiInterfaceIndex, 
      sizeof(uiInterfaceIndex) 

怎样的IP被选中?内核本身?

如果要使用特定的源地址,你可以使用bind()通话,就像使用的IPv4谢谢

+0

我不认为这与IPv4 vs IPv6有什么关系?如果您想在侦听时绑定到特定的IP,您可以在bind()调用中执行此操作。 – CodeCaster

回答

2

如果您想让内核决定使用哪个源地址,请不要使用bind()或绑定到未指定的地址。这也与IPv4相同,但您可能没有注意到,因为您之前没有使用具有多个IPv4地址的系统。它们并不常见,但它们确实存在:)

IPv4的未指定地址是0.0.0.0,IPv6的地址是::。在这两种情况下,它都是“全零”地址。

如果你想了解内核如何选择地址的细节,请看RFC6724。有很多适用的规则。起初理解起来可能有点复杂,但想法是内核应该选择一个正常工作的地址。

+0

非常感谢! – Render

相关问题