我有一个应用程序,我想在发生任何网络变化时收到通知。我找到了一堆解决方案,比如
- 使用网络管理器或者systemd 网络服务(我不喜欢这个服务,因为我不知道这些服务是否在用户系统上安装并运行)
- 使用Netlink 套接字:这里所有网络变化事件信息都排队在 netlink 消息队列中,我们应用程序中的处理程序将从此队列中获取数据并进行处理。我们必须使用 while(1) 循环,它会定期处理来自此队列的数据。(此方法需要不断轮询队列中的任何更新)
其他平台(如 Windows 和 Mac)具有观察者 API,我们可以在其中订阅网络更改事件,并且每当发生此事件时,我们的应用程序都会在处理程序中收到通知。我在寻找 Linux 中是否有类似的东西?
编辑:由于 NetworkManager 默认存在于 Ubuntu 发行版中,因此我可以使用 DBus 实现,因为 NetworkManager 在系统的网络状态发生变化时会通过 D-Bus 广播事件。我所说的网络变化是指在 Ubuntu 上监视系统何时连接、断开连接,甚至从一个 Wifi/以太网网络切换到另一个 Wifi/以太网网络。我想在 cpp 程序中识别 dbus 事件。