我的网络上有一个设备(只有静态IP的Wi-Fi),静态IP地址为192.168.1.17。我在linux中的c ++程序中使用它作为我的部分代码的输入,但是如果它断开/关闭,程序停止响应,因为它试图从不存在的位置提取数据。有没有办法可以检查它是否断开连接以便我可以在程序失控之前停止它?感谢我知道有用的回复!
答案 0 :(得分:0)
使用ioctl SIOCGIFFLAGS
检查界面是否正在运行:
struct ifreq ifr;
memset( &ifr, 0, sizeof(ifr) );
strcpy( ifr.ifr_name, ifrname );
if( ioctl( dummy_fd, SIOCGIFFLAGS, &ifr ) != -1 )
{
up_and_running = (ifr.ifr_flags & ( IFF_UP | IFF_RUNNING )) == ( IFF_UP | IFF_RUNNING );
}
else
{
// error
}
输入变量为ifrname
。它应该是接口名称" eth0",eth1"," ppp0" ....
因为ioctl()
需要文件描述符作为参数,所以你可以使用例如一些临时UDP套接字:
dummy_fd = socket( AF_INET, SOCK_DGRAM, 0 );
请记住在不再使用时关闭套接字。
答案 1 :(得分:0)
在继续
之前尝试ping 192.168.1.17int status = system("ping -c 2 192.168.1.17");
if (-1 != status)
{
ping_ret = WEXITSTATUS(status);
if(ping_ret==0)
cout<<"Ping successful"<<endl; ////Proceed
else
cout<<"Ping not successful"<<endl; ///Sleep and agin check for ping
}