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

时间:2009-08-13 05:33:24

标签: c interface ipv6 polling

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

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

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

3 个答案:

答案 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函数。