启动时,我的程序调用getifaddrs()来查找可用于链接本地IPv6多播的网络接口。这样做可行,但它不处理getifaddrs()返回后可用网络接口集发生变化的情况。
当网络接口发生变化时,OS是否有某种方式通知我的程序,所以我可以再次调用getifaddrs()并更新我的列表?或者我注定每隔几秒钟就会对getifaddrs()进行一次轮询?
(注意:在Windows上,我调用GetAdaptersAddresses()而不是getifaddrs(),但同样存在问题)
答案 0 :(得分:3)
此外,Linux的实现方法是打开一个家庭AF_NETLINK和子类型NETLINK_ROUTE的套接字,并从内核中读取到达它的消息,如“man 7 netlink”中包含的示例代码所示。 (感谢Rob Searce指出我的那个!)
答案 1 :(得分:2)
如果有人感兴趣,我在Apple的开发者网站上找到了以下文档,其中描述了在网络配置发生变化时如何获得通知。这是非常重要的,但我确实得到了适合我的技术。特别参见清单8。
Technical Note TN1145 - Living in a Dynamic TCP/IP Environment"
答案 2 :(得分:1)
您可能希望查看NotifyAddrChange和NotifyIpInterfaceChange函数。