天天看點

recv函數傳回值

recv函數傳回值說明

recv函數

int recv( SOCKET s, char FAR *buf, int len, int flags);

不論是客戶還是伺服器應用程式都用recv函數從TCP連接配接的另一端接收資料。該函數的第一個參數指定接收端套接字描述符; 第二個參數指明一個緩沖區,該緩沖區用來存放recv函數接收到的資料; 第三個參數指明buf的長度; 第四個參數一般置0。

這裡隻描述同步Socket的recv函數的執行流程。當應用程式調用recv函數時,

(1)recv先等待s的發送緩沖中的資料被協定傳送完畢,如果協定在傳送s的發送緩沖中的資料時出現網絡錯誤,那麼recv函數傳回SOCKET_ERROR,

(2)如果s的發送緩沖中沒有資料或者資料被協定成功發送完畢後,recv先檢查套接字s的接收緩沖區,如果s接收緩沖區中沒有資料或者協定正在接收數 據,那麼recv就一直等待,直到協定把資料接收完畢。當協定把資料接收完畢,recv函數就把s的接收緩沖中的資料copy到buf中(注意協定接收到的資料可能大于buf的長度,是以 在這種情況下要調用幾次recv函數才能把s的接收緩沖中的資料copy完。recv函數僅僅是copy資料,真正的接收資料是協定來完成的), recv函數傳回其實際copy的位元組數。如果recv在copy時出錯,那麼它傳回SOCKET_ERROR;如果recv函數在等待協定接收資料時網絡中斷了,那麼它傳回0。 預設 socket 是阻塞的 解阻塞與非阻塞recv傳回值沒有區分,都是 <0 出錯 =0 連接配接關閉 >0 接收到資料大小,