3

我的程序必须检测以太网接口何时变为RUNNING状态。

我可以使用以下方式轮询运行标志ioctl()

if( ioctl( dummy_fd, SIOCGIFFLAGS, &ifr ) != -1 )
    return ifr.ifr_flags & IFF_RUNNING;

但要立即获得信息,无需轮询。目前该程序select()用于等待其他事件。所以它可以很好地select()用于检测接口的状态变化。

有一种方法可以做到这一点select,我确实从网上读到过。但是我再也找不到那个页面了。

4

1 回答 1

4

内核通过 netlink 发送有关网络接口更改的信息;see eg here for an example http://softengcrunch.blogspot.cz/2010/12/communicating-with-kernel-via-netlink.html A quick and dirty hack would be to do the polling after any netlink event (when select wakes在 netlink 套接字上),而不实际解析 netlink 数据包;)

于 2012-10-19T10:36:25.827 回答