c - 在 Linux 上获取有关网络接口(interface)更改的通知

标签 c linux networking

我需要一种在启用或禁用网络接口(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/

相关文章:

c - 在 macOS 内核扩展中有效地使用同步

c++ - 位操作运算符优先级对输出的影响

linux - 如何关闭 Net::LDAP::Server

windows - 无法访问 Windows 节点上的 Kubernetes 服务

networking - BGP 与 OSPF 和 IsIs

amazon-web-services - 在 self 管理的 Kubernetes 上获取 Istio 网关的外部 IP

c - Vugen - 在 mkdir 路径中创建动态值

c - STM32 HAL SPI 中断处理

java - 用JAVA扫描一系列文件夹

c++ - 在 linux 上加载多个相似的共享库