linux下recv函式返回

2021-08-21 19:20:08 字數 1034 閱讀 6900

函式原型:

ssize_t recv(intsockfd,void*buf,size_tlen,intflags);

該函式第乙個引數制定接收端套接字描述符;

第二個引數指明乙個緩衝區,該緩衝區用來存放recv函式接收到的資料;

第三個引數指明緩衝區buf的長度;

第四個引數一般置0; (標誌位)

recv函式返回其實際copy的位元組數。如果recv在copy時出錯,那麼它返回socket_error; 如果recv函式在等待協議接收資料時網路中斷了,那麼它返回0;

recv函式僅僅是copy資料, 真正的接收資料是協議來完成的。

預設recv函式socket 是阻塞的

阻塞與非阻塞recv返回值沒有區分,都是

<0 出錯

=0 連線關閉

>0 接收到資料大小,

特別:返回值<0時並且(errno == eintr || errno == ewouldblock || errno == eagain)的情況下認為連線是正常的,繼續接收。

只是阻塞模式下recv會阻塞著接收資料,非阻塞模式下如果沒有資料會返回,不會阻塞著讀,因此需要迴圈讀取)。

返回說明:

成功執行時,返回接收到的位元組數。另一端已關閉則返回0。失敗返回-1,errno被設為以下的某個值

eagain:套接字已標記為非阻塞,而接收操作被阻塞或者接收超時

ebadf:sock不是有效的描述詞

econnrefuse:遠端主機阻絕網路連線

efault:記憶體空間訪問出錯

eintr:操作被訊號中斷

einval:引數無效

enomem:記憶體不足

enotconn:與面向連線關聯的套接字尚未被連線上

enotsock:sock索引的不是套接字

當返回值是0時,為正常關閉連線;

recv函式返回值

recv函式 int recv socket s,char far buf,int len,int flags 不論是客戶還是伺服器應用程式都用recv函式從tcp連線的另一端接收資料。該函式的第乙個引數指定接收端套接字描述符 第二個引數指明乙個緩衝區,該緩衝區用來存放recv函式接收到的資料 第三...

recv函式返回值說明

recv函式 i nt recv socket s,char far buf,int len,int flags 不論是客戶還是伺服器應用程式都用recv函式從tcp連線的另一端接收資料。該函式的第乙個引數指定接收端套接字描述符 第二個引數指明乙個緩衝區,該緩衝區用來存放recv函式接收到的資料 第...

recv函式返回值說明

recv函式 int recv socket s,char far buf,int len,int flags 不論是客戶還是伺服器應用程式都用recv函式從tcp連線的另一端接收資料。該函式的第乙個引數指定接收端套接字描述符 第二個引數指明乙個緩衝區,該緩衝區用來存放recv函式接收到的資料 第三...