c - 如何抑制多个 netlink 事件?

标签 c linux sockets netlink

我一直在使用this code作为在 Linux 机器上接收接口(interface)启动/关闭事件的示例。我能够正确接收事件,但是当接口(interface)从先前的关闭状态恢复时,我会收到多个这样的网络链接事件:

Event received >> NETLINK::Down
Event received >> NETLINK::Down
Event received >> NETLINK::Up

编辑:我修改了这段代码中的一行:

addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;

到:

addr.nl_groups = RTMGRP_LINK;

但我仍然收到多个事件。任何人都可以建议是否可以抑制这些事件以接收每个状态的唯一事件?如果是怎么办?

最佳答案

经过大量研究,我终于完成了这项工作。有一个名为“ifi_change”的标志,它给出了网络设备状态变化的变化。我无法想到它,因为 rtnetlink man page没有提及任何相关内容。它表示它保留供将来使用,应始终设置为 0xFFFFFFFF。但是,它的值会随着界面当前状态的变化而变化。如果状态发生变化,它会给出一个有限值,否则为零。使用此检查,我能够抑制多个网络链接消息。

关于c - 如何抑制多个 netlink 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27700208/

相关文章:

我们可以在C语言中的printf()函数中使用printf语句吗

linux - 为什么 Qt 无法在我的新硬件上初始化显示

python - bash脚本替换html中的空格

sockets - 在 Java ME 中使用套接字连接下载二进制文件

c - 编码解码字节

c - getch 返回 -1?

c - 使用替代验证 key 的 fscanf()/vscanf() 函数系列的替代方案或如何创建自定义语言布局?

c - 在 C 中通过引用传递

c++ - 如何将彩色文本输出到 Linux 终端?

javascript - 双向连续套接字通信