Existe um mecanismo de notificação para quando a mudança getifaddrs () resultados?

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

  •  13-09-2019
  •  | 
  •  

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á)

Foi útil?

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 "

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top