我需要一种在启用或禁用网络接口(interface)时通知我的用户空间应用程序的方法。我希望在不诉诸投票的情况下做到这一点。当网络相关事件发生时,内核是否提供某种钩子(Hook)来触发回调函数?
最佳答案
我相信 netlink (man 7 netlink
) 工具通过 NETLINK_ROUTE
系列 (man 7 rtnetlink
) 提供有关网络接口(interface)的信息。您可以在 netlink 套接字上使用 select()
或 poll()
来获取您想要的信息。不过,我不确定这一点;我自己没用过。
在更高层次上,如果系统正在运行 NetworkManager ,当系统的网络状态发生变化时,它将通过 D-Bus 广播事件。例如,Epiphany 浏览器使用这些事件在系统失去网络连接时自动激活“离线工作”模式,并在网络连接恢复时切换回在线模式。有多种语言的 D-Bus 客户端库,它不像 netlink 那样特定于平台,所以这是我推荐使用的。
关于c - 在 Linux 上获取有关网络接口(interface)更改的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261759/