您可以通过以下方式轮询链接状态ioctl():
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, "eth0");
if (ioctl(fd, SIOCGIFFLAGS, &ifr) != -1)
{
up_and_running = (ifr.ifr_flags & ( IFF_UP | IFF_RUNNING )) == ( IFF_UP | IFF_RUNNING );
}
Run Code Online (Sandbox Code Playgroud)
如果您想立即了解有关更改的信息,请收听来自内核的 netlink 消息。
请参见手册页PF_NETLINK(7)。
创建用于获取链接事件的 AF_NETLINK 套接字:
const int netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (netlink_fd != -1)
{
struct sockaddr_nl sa;
memset(&sa, 0, sizeof(sa));
sa.nl_family = AF_NETLINK;
sa.nl_groups = RTNLGRP_LINK;
bind(netlink_fd, (struct sockaddr*)&sa, sizeof(sa));
}
Run Code Online (Sandbox Code Playgroud)
..并根据需要接收和处理消息。
有一个库libnl可以使这更容易。
| 归档时间: |
|
| 查看次数: |
1468 次 |
| 最近记录: |