2017-08-02 41 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

相關問題