socket程式設計中應用recv判斷連線已斷開

2021-07-31 13:00:31 字數 578 閱讀 3756

在網路程式設計中,經常會檢測網路的連線情況,進而進行下面的動作。在linux的socket程式設計中,有一種非常方便的方法,來判斷對方是否斷開了連線,就是使用recv函式。

在apue 中,對 recv的表述如下,

#include 

ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);

返回值:返回資料的位元組長度;若無可用資料或對等方已經按序結束,返回0;若出錯,返回-1

如果傳送端主動關閉傳輸,或是傳送端主動關閉了連線後,recv最終會返回0.

利用這個特性,可以用 recv返回0來進行傳送方斷開連線的判斷。

/* receive ready*/

if(fd_isset(clientfd,&rdset_tmp))else

if(recbytes==0)

}

需要注意的是:此種方法只能判斷傳送端主動斷開連線的行為,對於網路異常等客觀原因出現連線斷開的情況無法判定,可以借助心跳資料等方式進一步判定。

socket程式設計中recv的錯誤使用

在昨天的測試中,終於發現了apicollector上傳樣本至executor時樣本錯誤的問題。問題原因在對socket中recv函式的理解錯誤。之前的做法是 在傳送端apicollector首先傳送樣本的資訊至executor,包括樣本名稱 大小等,然後將樣本分成一塊一塊傳送,每塊2048位元組,在...

socket程式設計 recv 返回值處理

一般在經典的socket教程中,呼叫send 和recv 時都會判斷一下返回值,如果返回值是 1 或者socket error 那麼就進行錯誤處理 一般是列印出錯資訊,關閉socket,退出 在我的乙個專案中我因為嫌麻煩就想當然沒有判斷send和recv的返回值,結果遇到了點小麻煩。簡單地說明一下問...

socket中send函式和recv函式的理解

int send socket s,const char buf,int len,int flags 引數描述 同步 socket 的send函式的執行流程如下 如果len大於傳送緩衝區剩餘空間大小 不足放入剩餘傳送緩衝區 send就一直 等待協議把s傳送緩衝區中的資料傳送完 如果len小於傳送緩衝...