go語言判斷socket是否關(guān)閉的方法-創(chuàng)新互聯(lián)

套接字(socket)是一個抽象層,應(yīng)用程序可以通過它發(fā)送或接收數(shù)據(jù),可對其進(jìn)行像對文件一樣的打開、讀寫和關(guān)閉等操作。

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計、做網(wǎng)站與策劃設(shè)計,萬秀網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:萬秀等地區(qū)。萬秀做網(wǎng)站價格咨詢:028-86922220

方法一:

當(dāng)recv()返回值小于等于0時,socket連接斷開。但是還需要判斷 errno是否等于 EINTR,如果errno == EINTR 則說明recv函數(shù)是由于程序接收到信號后返回的,socket連接還是正常的,不應(yīng)close掉socket連接。

方法二:

  struct tcp_info info; 
  int len=sizeof(info); 
  getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
  if((info.tcpi_state==TCP_ESTABLISHED))  則說明未斷開  else 斷開

方法三:

若使用了select等系統(tǒng)函數(shù),若遠(yuǎn)端斷開,則select返回1,recv返回0則斷開。其他注意事項同法一。

法四:

int keepAlive = 1; // 開啟keepalive屬性
int keepIdle = 60; // 如該連接在60秒內(nèi)沒有任何數(shù)據(jù)往來,則進(jìn)行探測
int keepInterval = 5; // 探測時發(fā)包的時間間隔為5 秒
int keepCount = 3; // 探測嘗試的次數(shù).如果第1次探測包就收到響應(yīng)了,則后2次的不再發(fā).
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));

設(shè)置后,若斷開,則在使用該socket讀寫時立即失敗,并返回ETIMEDOUT錯誤

以上就是golang怎么判斷套接字是否關(guān)閉的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

網(wǎng)頁題目:go語言判斷socket是否關(guān)閉的方法-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://muchs.cn/article4/dhgpie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司云服務(wù)器、App設(shè)計品牌網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)