當前位置:編程學習大全網 - 源碼下載 - linux 網絡編程 send 做了什麽操作

linux 網絡編程 send 做了什麽操作

send解析

sockfd:指定發送端套接字描述符。

buff: 存放要發送數據的緩沖區

nbytes: 實際要改善的數據的字節數

flags: 壹般設置為0

1) send先比較發送數據的長度nbytes和套接字sockfd的發送緩沖區的長度,如果nbytes > 套接字sockfd的發送緩沖區的長度, 該函數返回SOCKET_ERROR;

2) 如果nbtyes <= 套接字sockfd的發送緩沖區的長度,那麽send先檢查協議是否正在發送sockfd的發送緩沖區中的數據,如果是就等待協議把數據發送完,如果協議還沒有開始發送sockfd的發送緩沖區中的數據或者sockfd的發送緩沖區中沒有數據,那麽send就比較sockfd的發送緩沖區的剩余空間和nbytes

3) 如果 nbytes > 套接字sockfd的發送緩沖區剩余空間的長度,send就壹起等待協議把套接字sockfd的發送緩沖區中的數據發送完

4) 如果 nbytes < 套接字sockfd的發送緩沖區剩余空間大小,send就僅僅把buf中的數據copy到剩余空間裏(註意並不是send把套接字sockfd的發送緩沖區中的數據傳到連接的另壹端的,而是協議傳送的,send僅僅是把buf中的數據copy到套接字sockfd的發送緩沖區的剩余空間裏)。

5) 如果send函數copy成功,就返回實際copy的字節數,如果send在copy數據時出現錯誤,那麽send就返回SOCKET_ERROR; 如果在等待協議傳送數據時網絡斷開,send函數也返回SOCKET_ERROR。

6) send函數把buff中的數據成功copy到sockfd的改善緩沖區的剩余空間後它就返回了,但是此時這些數據並不壹定馬上被傳到連接的另壹端。如果協議在後續的傳送過程中出現網絡錯誤的話,那麽下壹個socket函數就會返回SOCKET_ERROR。(每壹個除send的socket函數在執行的最開始總要先等待套接字的發送緩沖區中的數據被協議傳遞完畢才能繼續,如果在等待時出現網絡錯誤那麽該socket函數就返回SOCKET_ERROR)

7) 在unix系統下,如果send在等待協議傳送數據時網絡斷開,調用send的進程會接收到壹個SIGPIPE信號,進程對該信號的處理是進程終止。

  • 上一篇:未來指標源代碼設置
  • 下一篇:什麽是微工廠
  • copyright 2024編程學習大全網