检查是否在linux中使用c ++连接了lan设备

时间:2014-03-28 04:21:43

标签: c++ linux wifi

我的网络上有一个设备(只有静态IP的Wi-Fi),静态IP地址为192.168.1.17。我在linux中的c ++程序中使用它作为我的部分代码的输入,但是如果它断开/关闭,程序停止响应,因为它试图从不存在的位置提取数据。有没有办法可以检查它是否断开连接以便我可以在程序失控之前停止它?感谢我知道有用的回复!

2 个答案:

答案 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 );

请记住在不再使用时关闭套接字。

了解如何进入非常低级别并使用ioctl(7)。请参阅Adam Risi的lsif作为示例。

答案 1 :(得分:0)

在继续

之前尝试ping 192.168.1.17
int 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
}