Domanda

All'avvio, il mio programma chiama getifaddrs () per scoprire quali sono disponibili per il collegamento locale IPv6 multicast interfacce di rete. Questo funziona per quanto si va, ma non gestisce il caso in cui l'insieme di interfacce di rete disponibile cambiamenti dopo getifaddrs () è tornato.

C'è qualche modo per il sistema operativo di notificare il mio programma quando le interfacce di rete sono cambiati, così posso chiamare di nuovo getifaddrs () e aggiornare la mia lista? O sto condannato a interrogare getifaddrs () ogni pochi secondi, per sempre?

(Nota: su Windows, che io chiamo GetAdaptersAddresses () al posto di getifaddrs (), ma lo stesso problema esiste lì)

È stato utile?

Soluzione

Probabilmente si vuole avere uno sguardo alle funzioni NotifyAddrChange e NotifyIpInterfaceChange.

Altri suggerimenti

Inoltre, il modo in cui Linux per implementare questo è con l'apertura di una presa di AF_NETLINK famiglia e sottotipo NETLINK_ROUTE e leggendo i messaggi che arrivano su di esso dal kernel, come mostrato nel codice di esempio incluso in "man 7 netlink". (Grazie a Rob Searce per me che punta a quel!)

Nel caso in cui qualcuno è interessato, ho trovato il seguente documento sul sito degli sviluppatori di Apple che descrive come essere avvisato quando le modifiche di configurazione di rete. E 'non banale, ma ho fatto arrivare la tecnica di lavorare per me. Listato 8 in particolare.

Nota tecnica TN1145 - Vivere in un ambiente dinamico TCP / IP "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top