Frage

Beim Start meines Programm ruft getifaddrs (), um herauszufinden, welche Netzwerk-Schnittstellen zur Verfügung stehen für Link-Local IPv6-Multicast. Das funktioniert so weit wie es geht, aber es nicht den Fall behandeln, in denen die Menge der verfügbaren Netzwerkschnittstellen ändert sich nach getifaddrs () zurückgekehrt ist.

Gibt es eine Möglichkeit für das OS mein Programm zu benachrichtigen, wenn die Netzwerkschnittstellen geändert haben, so kann ich anrufen getifaddrs () erneut und aktualisieren meine Liste? Oder bin ich zum Scheitern verurteilt getifaddrs () alle paar Sekunden abzufragen, für immer?

(Hinweis: unter Windows, ich nenne GetAdaptersAddresses () anstelle von getifaddrs (), aber das gleiche Problem existiert)

War es hilfreich?

Lösung

Sie wollen wahrscheinlich einen Blick auf den NotifyAddrChange und NotifyIpInterfaceChange Funktionen haben.

Andere Tipps

Auch die Linux-Weg, dies zu implementieren ist durch eine Fassung der Familie AF_NETLINK und Subtyp NETLINK_ROUTE öffnen und die Nachrichten zu lesen, die auf sie aus dem Kernel gelangen, wie in dem Beispiel-Code enthalten in „Mann 7 netlink“ gezeigt. (Dank an Rob searce für mich zu dem Hinweis!)

Falls jemand interessiert ist, fand ich das folgende Dokument auf dem Apple-Entwickler-Site, die beschreibt, wie benachrichtigt werden, wenn die Netzwerkkonfigurationsänderungen. Es ist nicht trivial, aber ich habe die Technik bekommen für mich zu arbeiten. Listing 8 insbesondere.

Technical Note TN1145 - Leben in einer dynamischen TCP / IP-Umgebung "

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top