Pregunta

En el inicio, mi programa llama getifaddrs () para averiguar qué opciones están disponibles para la multidifusión IPv6 de enlace local interfaces de red. Esto funciona como lo que le pasa, pero no maneja el caso en el que el conjunto de interfaces de red disponible cambios después getifaddrs () ha regresado.

¿Hay alguna manera para el sistema operativo para notificar mi programa cuando las interfaces de red han cambiado, por lo que se puede llamar getifaddrs () de nuevo y actualizar mi lista? O estoy condenado a sondear getifaddrs () cada pocos segundos, para siempre?

(Nota: en Windows, llamo GetAdaptersAddresses () en lugar de getifaddrs (), pero existe el mismo problema allí)

¿Fue útil?

Solución

Es posible que desee echar un vistazo a las funciones NotifyAddrChange y NotifyIpInterfaceChange.

Otros consejos

Además, la forma en Linux para implementar esto es mediante la apertura de una toma de AF_NETLINK familia y subtipo NETLINK_ROUTE y la lectura de los mensajes que llegan desde el núcleo, como se muestra en el código de ejemplo que se incluye en el "hombre 7 de enlace de red". (Gracias a Rob Searce por dirigirme a eso!)

En caso de que a alguien le interesa, he encontrado el siguiente documento en el sitio de desarrolladores de Apple que describe cómo para ser notificado cuando los cambios de configuración de red. Es no trivial, pero me hizo llegar la técnica a trabajar para mí. Ver Listado 8 en particular.

Nota Técnica TN1145 - La vida en un entorno dinámico TCP / IP "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top