При запуске моя программа вызывает getifaddrs(), чтобы узнать, какие сетевые интерфейсы доступны для многоадресной рассылки local-local IPv6. Это работает, насколько это возможно, но не обрабатывает случай, когда набор доступных сетевых интерфейсов изменяется после возврата getifaddrs().Есть ли механизм уведомления, когда результаты getifaddrs() меняются?
Есть ли способ для ОС уведомлять мою программу, когда сетевые интерфейсы изменились, поэтому я могу снова вызвать getifaddrs() и обновить список? Или я обречен на опрос getifaddrs() каждые несколько секунд, навсегда?
(Примечание: на Windows, я называю GetAdaptersAddresses() вместо getifaddrs(), но та же проблема существует там)
Почему вы ожидаете, что сетевые интерфейсы будут так часто меняться, что вам придется опросить каждые несколько секунд? Вы говорите об виртуальных интерфейсах? –
До сих пор мы в основном видели проблему на MacBooks, где у пользователя есть наша программа и включается и выключается AirPort, подключается/отключается от проводной локальной сети, включает/отключает высокоскоростную беспроводную связь HSPA и т. Д. Когда это происходит , программа начинает работать с ошибкой, так как она все еще пытается использовать неактивные интерфейсы и не пытается использовать новые активные. –
Dupe: http://stackoverflow.com/questions/579783/how-to-detect-ip-address-change-programmatically-in-linux –