socket對於recv函數的理解



函數原型:int recv( SOCKET s, char *buf, int  len, int flags)

功能:不論是客戶還是服務器應用程序都用recv函數從TCP連接的另一端接收數據。

參數一:指定接收端套接字描述符;

參數二:指明一個緩沖區,該緩沖區用來存放recv函數接收到的數據;

參數三:指明buf的長度;

參數四 :一般置為0。
 

同步Socket的recv函數的執行流程:當應用程序調用recv函數時,recv先等待s的發送緩沖中的數據被協議傳送完畢,

如果協議在傳送s的發送緩沖中的數據時出現網絡錯誤,那么recv函數返回SOCKET_ERROR;

如果s的發送緩沖中沒有數據或者數據被協議成功發送完畢后,recv先檢查套接字s的接收緩沖區,如果s接收緩沖區中沒有數據或者協議正在接收數據,那么recv就一直等待,直到協議把數據接收完畢;

當協議把數據接收完畢,recv函數就把s的接收緩沖中的數據copy到buf中(注意協議接收到的數據可能大於buf的長度,所以在這種情況下要調用幾次recv函數才能把s的接收緩沖中的數據copy完。recv函數僅僅是copy數據,真正的接收數據是協議來完成的),recv函數返回其實際copy的字節數;

如果recv在copy時出錯,那么它返回SOCKET_ERROR;如果recv函數在等待協議接收數據時網絡中斷了,那么它返回0。

原文鏈接:https://blog.csdn.net/UN_spoken/article/details/99607381


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM