C 如何抑制多个netlink事件?

C 如何抑制多个netlink事件?,c,linux,sockets,netlink,C,Linux,Sockets,Netlink,我一直使用它作为示例,在Linux机器上接收接口向上/向下事件。我能够正确接收事件,但当接口从先前的关闭状态启动时,我会接收多个netlink事件,如下所示: Event received >> NETLINK::Down Event received >> NETLINK::Down Event received >> NETLINK::Up 编辑:我修改了代码中的一行: addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4

我一直使用它作为示例,在Linux机器上接收接口向上/向下事件。我能够正确接收事件,但当接口从先前的关闭状态启动时,我会接收多个netlink事件,如下所示:

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 | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
我建议把范围缩小到

addr.nl_groups = RTMGRP_LINK;

(或适当地连接到IPv4/IPv6。)

经过大量研究,我终于能够完成这项工作。有一个名为“ifi_change”的标志,它给出网络设备状态变化的变化。我想不起来了,因为他什么也没提。它说它是为将来使用而保留的,并且应该始终设置为0xFFFFFF。但是,其值会随着接口当前状态的变化而变化。如果存在状态变化,则给出一个有限值,否则为零。使用此检查,我可以抑制多条netlink消息。

Oops!!抱歉,我忘了提及我已经尝试过了,但我仍然收到多个向上/向下事件。@iqstatic:如果您正在运行的代码与您链接到的代码不同,我认为您应该在问题中包含您的代码(减少到重现问题所需的绝对最小值).你建议的改变是我唯一做的改变。你是如何了解ifi_改变的?通过浏览和理解内核代码?或者有没有其他我找不到的文档。
addr.nl_groups = RTMGRP_LINK;