getifaddrs()结果发生变化时是否有通知机制?

在启动时,我的程序调用getifaddrs()来找出可用于链接本地IPv6多播的网络接口。 这样做可行,但它不处理getifaddrs()返回后可用网络接口集发生变化的情况。

当网络接口发生变化时,OS是否有某种方式通知我的程序,所以我可以再次调用getifaddrs()并更新我的列表? 或者我注定每隔几秒钟就会对getifaddrs()进行一次轮询?

(注意:在Windows上,我调用GetAdaptersAddresses()而不是getifaddrs(),但是存在相同的问题)

您可能希望查看NotifyAddrChange和NotifyIpInterfaceChange函数。

此外,Linux的实现方法是打开一个家庭AF_NETLINK和子类型NETLINK_ROUTE的套接字,并从内核中读取到达它的消息,如“man 7 netlink”中包含的示例代码所示。 (感谢Rob Searce指点我!)

如果有人有兴趣,我在Apple的开发者网站上找到了以下文档,该文档描述了在网络配置发生变化时如何获得通知。 这是非常重要的,但我确实得到了适合我的技术。 特别参见清单8。

技术说明TN1145 – 生活在动态TCP / IP环境中“