Y at-il un mécanisme de notification lorsque les résultats de getifaddrs () changent?

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

  •  13-09-2019
  •  | 
  •  

Question

Au démarrage, mon programme appelle getifaddrs () pour savoir quelles interfaces réseaux sont disponibles pour la diffusion groupée IPv6 de liaison locale. Cela fonctionne dans la mesure où il va, mais il ne gère pas le cas où l'ensemble des interfaces réseau disponibles après modifications getifaddrs () est de retour.

Est-il possible pour le système d'exploitation de notifier mon programme lorsque les interfaces réseau ont changé, donc je peux appeler à nouveau getifaddrs () et mettre à jour ma liste? Ou suis-je condamné au sondage getifaddrs () toutes les quelques secondes, pour toujours?

(Note: sous Windows, j'appelle GetAdaptersAddresses () au lieu de getifaddrs (), mais le même problème existe là)

Était-ce utile?

La solution

Vous voulez sans doute avoir un regard sur les fonctions de NotifyAddrChange et NotifyIpInterfaceChange.

Autres conseils

En outre, la façon dont Linux à mettre en œuvre est d'ouvrir une prise de AF_NETLINK familiale et sous-type NETLINK_ROUTE et la lecture des messages qui arrivent sur elle à partir du noyau, comme le montre l'exemple de code inclus dans « l'homme 7 NetLink ». (Merci à Rob Searce me montrant que!)

Dans le cas où quelqu'un est intéressé, je trouve le document suivant sur le site développeur d'Apple qui décrit comment être averti quand les changements de configuration du réseau. Il est non trivial, mais j'ai eu la technique de travailler pour moi. Voir Listing 8 en particulier.

Note technique TN1145 - Vivre dans un environnement TCP / IP dynamique "

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top