2011-05-09 18 views
3

我正在嘗試使用Boost進行某些IPv6和多播網絡通信。我需要構建一個使用特定網絡接口索引的IPv6多播套接字。查找IPv6的正確「網絡接口」編號

我能夠找到正確的組播選項來設置網絡接口指數升壓/ ASIO/IP /細節/ socket_option.hpp: 明確multicast_request(常量的boost ::支持ASIO ::知識產權:: address_v6 & multicast_address, unsigned long network_interface = 0)

問題是,我不知道如何找到「network_interface」參數的正確值。有沒有辦法使用我可以提供的本地IPv6地址獲取network_interface值?我查看了文檔和示例,但找不到任何東西。

- 迪倫

回答

2

每個平臺都提供API來枚舉網絡接口,例如,適用於Windows的getifaddrs,適用於Windows的GetAdaptersAddresses。請注意,Windows有一個單獨的數字空間用於IPv4和IPv6適配器,這使得API調用if_nametoindex非常混亂。

您可能要檢查我的OpenPGM採用便攜的方法,考慮到Windows並沒有真正有用的適配器名稱:

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/getifaddrs.c

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/nametoindex.c

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/indextoaddr.c

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/indextoname.c

+0

我已經使用'if_nametoindex(3)'函數在Linux上,它的工作完美。 I.e .:「int interfaceIndex = if_nametoindex(」eth0「); socket.set_option(boost :: asio :: ip :: multicast :: join_group(address.to_v6(),interfaceIndex));' – uldall 2013-03-21 12:19:28