亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何在C語(yǔ)言中判斷socket是否已經(jīng)斷開(kāi)

 更新時(shí)間:2019年05月20日 14:25:37   作者:Anyanyamy  
如果不主動(dòng)關(guān)閉socket的話,系統(tǒng)不會(huì)自動(dòng)關(guān)閉的,除非當(dāng)前進(jìn)程掛掉了,操作系統(tǒng)把占用的socket回收了才會(huì)關(guān)閉。小編今天跟大家簡(jiǎn)單介紹下如何在C語(yǔ)言中判斷socket是否已經(jīng)斷開(kāi)

下面來(lái)介紹判斷非阻塞SOCKET是否已經(jīng)斷開(kāi)的幾種方法:

注意要區(qū)分不同操作系統(tǒng)分別進(jìn)行測(cè)試, 包括WINDOWS, LINUX和UNIX會(huì)各有不同。

在WINDOWS下比較簡(jiǎn)單,可以使用FD_CLOSE事件判斷SOCKET是否已經(jīng)斷開(kāi)

view plaincopy to clipboardprint?
bool IsSocketClosed(SOCKET clientSocket) 
{ 
 bool ret = false; 
 HANDLE closeEvent = WSACreateEvent(); 
 WSAEventSelect(clientSocket, closeEvent, FD_CLOSE); 
 
 DWORD dwRet = WaitForSingleObject(closeEvent, 0); 
 
 if(dwRet == WSA_WAIT_EVENT_0) 
 ret = true; 
 else if(dwRet == WSA_WAIT_TIMEOUT) 
 ret = false; 
 
 WSACloseEvent(closeEvent); 
 return ret; 
} 
 

在UNIX/LINUX下,非阻塞模式SOCKET可以采用recv+MSG_PEEK的方式進(jìn)行判斷,其中MSG_PEEK保證了僅僅進(jìn)行狀態(tài)判斷,而不影響數(shù)據(jù)接收

對(duì)于主動(dòng)關(guān)閉的SOCKET, recv返回-1,而且errno被置為9(#define EBADF   9 /* Bad file number */)

或104 (#define ECONNRESET 104 /* Connection reset by peer */)

對(duì)于被動(dòng)關(guān)閉的SOCKET,recv返回0,而且errno被置為11(#define EWOULDBLOCK EAGAIN /* Operation would block */)

對(duì)正常的SOCKET, 如果有接收數(shù)據(jù),則返回>0, 否則返回-1,而且errno被置為11(#define EWOULDBLOCK EAGAIN /* Operation would block */)

因此對(duì)于簡(jiǎn)單的狀態(tài)判斷(不過(guò)多考慮異常情況),
    recv返回>0,   正常
    返回-1,而且errno被置為11  正常
    其它情況    關(guān)閉

view plaincopy to clipboardprint?
#include <errno.h> 
 
bool IsSocketClosed(int clientSocket) 
{ 
 char buff[32]; 
 int recvBytes = recv(clientSocket, buff, sizeof(buff), MSG_PEEK); 
 
 int sockErr = errno; 
 
 //cout << "In close function, recv " << recvBytes << " bytes, err " << sockErr << endl; 
 
 if( recvBytes > 0) //Get data 
 return false; 
 
 if( (recvBytes == -1) && (sockErr == EWOULDBLOCK) ) //No receive data 
 return false; 
 
 return true; 
} 

此外,所有操作系統(tǒng)上還可以通過(guò)TCP_KEEPLIVE實(shí)行心跳檢測(cè)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • OpenCV獲取圖像中直線上的數(shù)據(jù)具體流程

    OpenCV獲取圖像中直線上的數(shù)據(jù)具體流程

    對(duì)圖像進(jìn)行處理時(shí),經(jīng)常會(huì)有這類需求:客戶想要提取出圖像中某條直線或者ROI區(qū)域內(nèi)的感興趣數(shù)據(jù),進(jìn)行重點(diǎn)關(guān)注,怎么操作呢,下面小編通過(guò)實(shí)例代碼介紹下OpenCV獲取圖像中直線上的數(shù)據(jù),一起看看吧
    2021-11-11
  • 用c 獲取文件MD5值的實(shí)現(xiàn)方法

    用c 獲取文件MD5值的實(shí)現(xiàn)方法

    本篇文章是對(duì)用c語(yǔ)言獲取文件MD5值的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中實(shí)現(xiàn)子進(jìn)程執(zhí)行和管道通信詳解

    C++中實(shí)現(xiàn)子進(jìn)程執(zhí)行和管道通信詳解

    在這篇博客中,我們將深入探索如何在 C++ 程序中實(shí)現(xiàn)子進(jìn)程的創(chuàng)建與執(zhí)行,以及父子進(jìn)程間的管道通信,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C++ Qt屬性系統(tǒng)詳細(xì)介紹

    C++ Qt屬性系統(tǒng)詳細(xì)介紹

    這篇文章主要介紹了C++ Qt屬性系統(tǒng)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • C語(yǔ)言實(shí)現(xiàn)自行車存放管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)自行車存放管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)自行車存放管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++基于Boost庫(kù)實(shí)現(xiàn)命令行解析

    C++基于Boost庫(kù)實(shí)現(xiàn)命令行解析

    Boost庫(kù)中默認(rèn)自帶了一個(gè)功能強(qiáng)大的命令行參數(shù)解析器,以往我都是自己實(shí)現(xiàn)參數(shù)解析的,今天偶爾發(fā)現(xiàn)這個(gè)好東西,就來(lái)總結(jié)一下參數(shù)解析的基本用法,該庫(kù)需要引入program_options.hpp頭文件,即可使用了
    2021-06-06
  • Qt出現(xiàn)假死凍結(jié)現(xiàn)象的原因及解決方法

    Qt出現(xiàn)假死凍結(jié)現(xiàn)象的原因及解決方法

    應(yīng)用程序出現(xiàn)假死或凍結(jié)現(xiàn)象通常是由于一些常見(jiàn)問(wèn)題所導(dǎo)致的,本文主要介紹了Qt出現(xiàn)假死凍結(jié)現(xiàn)象的原因及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • VC程序在Win32環(huán)境下動(dòng)態(tài)鏈接庫(kù)(DLL)編程原理

    VC程序在Win32環(huán)境下動(dòng)態(tài)鏈接庫(kù)(DLL)編程原理

    這篇文章主要介紹了VC程序在Win32環(huán)境下動(dòng)態(tài)鏈接庫(kù)(DLL)編程原理,包括了dll文件的原理與具體實(shí)現(xiàn)過(guò)程,對(duì)于深入掌握VC程序設(shè)計(jì)具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言進(jìn)階輸入輸出重定向與fopen函數(shù)使用示例詳解

    C語(yǔ)言進(jìn)階輸入輸出重定向與fopen函數(shù)使用示例詳解

    這篇文章主要為大家介紹了C語(yǔ)言進(jìn)階輸入輸出重定向與fopen函數(shù)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • C++三元表達(dá)式詳情

    C++三元表達(dá)式詳情

    這篇文章主要介紹了C++三元表達(dá)式,文章圍繞C++三元表達(dá)式的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望多你有所幫助
    2021-11-11

最新評(píng)論