2014-03-28 59 views
0

我的網絡上有一個設備(具有靜態IP的wi-fi),其靜態IP地址爲192.168.1.17。我在linux的C++程序中使用它作爲我的代碼的一部分,但是如果它斷開/關閉,程序將停止響應,因爲它試圖從不存在的位置提取數據。有沒有辦法可以檢查它是否斷開連接,以便在程序失控之前停止該程序?感謝我所知道的有益迴應!檢查lan設備是否使用linux中的C++連接

+0

如果您使用的是NetworkManager,則可以使用它的API,請參閱https://wiki.gnome.org/Projects/NetworkManager。您可以使用D-Bus API,GLib包裝,請參閱http://sourceforge.net/apps/mediawiki/dbus-cplusplus/index.php?title=Main_Page –

+0

您的代碼在192.168.1.17上運行? –

回答

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)。示例見lsif由亞當·裏希。

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 
} 
相關問題