2009-08-13 29 views
4

啓動時,我的程序調用getifaddrs()來查找哪些網絡接口可用於鏈接本地IPv6多播。這種方式儘可能地發揮作用,但它不處理getifaddrs()返回後可用網絡接口集合發生變化的情況。是否有getifaddrs()結果更改的通知機制?

當網絡接口發生變化時,操作系統是否可以通知我的程序,因此我可以再次調用getifaddrs()並更新我的列表?或者我註定每隔幾秒輪詢getifaddrs(),永遠?

(注:在Windows上,我呼籲GetAdaptersAddresses()代替getifaddrs(),但同樣的問題存在那裏)

+0

爲什麼你會期望網絡接口變化頻繁,以至於你不得不每隔幾秒輪詢一次?你在談論虛擬接口嗎? – 2009-08-13 05:56:12

+0

到目前爲止,我們主要看到了MacBook上的問題,用戶使用我們的程序運行並打開和關閉AirPort,連接/斷開有線局域網,啓用/禁用HSPA高速無線等。當發生這種情況時,程序開始發生故障,因爲它仍然試圖使用現在不活動的接口,而不是嘗試使用新活動的接口。 – 2009-08-13 15:46:16

+0

Dupe:http://stackoverflow.com/questions/579783/how-to-detect-ip-address-change-programmatically-in-linux – 2010-08-09 14:28:42

回答

1

你可能想看看在NotifyAddrChange和NotifyIpInterfaceChange功能。

2

如果有人有興趣,我在Apple的開發人員網站上找到以下文檔,介紹如何在網絡配置更改時收到通知。這是不平凡的,但我確實得到了技術爲我工作。特別見清單8。

Technical Note TN1145 - Living in a Dynamic TCP/IP Environment"

+0

我認爲上面的鏈接現在已經死了 - 我發現它在這一個http: //developer.apple.com/library/mac/#technotes/tn1145/_index.html – Steg 2011-10-27 09:30:31

3

此外,Linux的方式來實現,這是通過打開家庭AF_NETLINK和亞型NETLINK_ROUTE的插座和閱讀,從內核上到達的消息,如圖中的示例代碼包含在「男人7 netlink「。 (感謝Rob Searce爲我指出了這一點!)

相關問題