Existe um mecanismo de notificação para quando a mudança getifaddrs () resultados?
Pergunta
Na inicialização, o meu programa chama getifaddrs () para descobrir o que estão disponíveis interfaces de rede para ligação local IPv6 multicast. Isso funciona como medida em que vai, mas não lidar com o caso em que o conjunto de interfaces de rede alterações disponíveis após getifaddrs () retornou.
Existe alguma maneira para o OS para notificar o meu programa quando as interfaces de rede mudaram, para que eu possa chamar getifaddrs () novamente e atualizar minha lista? Ou eu estou condenado a getifaddrs poll () a cada poucos segundos, para sempre?
(Nota: no Windows, eu chamo GetAdaptersAddresses () em vez de getifaddrs (), mas o mesmo problema existe lá)
Solução
Você provavelmente vai querer ter um olhar para as funções NotifyAddrChange e NotifyIpInterfaceChange.
Outras dicas
Além disso, a forma como o Linux para implementar isso é abrindo um socket de família AF_NETLINK e subtipo NETLINK_ROUTE e ler as mensagens que chegam sobre ele a partir do kernel, como mostrado no código de exemplo incluído no "homem 7 netlink". (Graças a Rob Searce para mim apontando para isso!)
No caso alguém estiver interessado, eu encontrei o seguinte documento no site do desenvolvedor da Apple que descreve como para ser notificado quando as alterações de configuração de rede. É não-trivial, mas fiquei com a técnica para trabalhar para mim. Veja a Listagem 8 em particular.
Nota técnica TN1145 - Vivendo em um / IP ambiente dinâmico TCP "