Существует ли механизм уведомления об изменении результатов getifaddrs()?

StackOverflow https://stackoverflow.com/questions/1270186

  •  13-09-2019
  •  | 
  •  

Вопрос

При запуске моя программа вызывает getifaddrs(), чтобы узнать, какие сетевые интерфейсы доступны для многоадресной рассылки IPv6 по локальному каналу.Это работает, насколько это возможно, но не обрабатывает случай, когда набор доступных сетевых интерфейсов изменяется после возврата getifaddrs().

Есть ли способ, чтобы ОС уведомила мою программу об изменении сетевых интерфейсов, чтобы я мог снова вызвать getifaddrs() и обновить свой список?Или я обречен опрашивать getifaddrs() каждые несколько секунд и вечно?

(Примечание:в Windows я вызываю GetAdaptersAddresses() вместо getifaddrs(), но там существует та же проблема)

Это было полезно?

Решение

Вероятно, вы захотите взглянуть на функции NotifyAddrChange и NotifyIpInterfaceChange.

Другие советы

Кроме того, способ реализовать это в Linux — открыть сокет семейства AF_NETLINK и подтипа NETLINK_ROUTE и прочитать сообщения, поступающие на него из ядра, как показано в примере кода, включенном в «man 7 netlink».(Спасибо Робу Сирсу за то, что он указал мне на это!)

Если кому-то интересно, я нашел на сайте разработчиков Apple следующий документ, в котором описывается, как получать уведомления при изменении конфигурации сети.Это нетривиально, но я заставил эту технику работать на меня.См., в частности, листинг 8.

Техническое примечание TN1145 — Жизнь в динамической среде TCP/IP»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top