Linux上的套接字如何緩衝工作? 即,如果服務器不讀取套接字並且客戶端繼續發送數據。 那麼會發生什麼?套接字的緩衝區有多大?客戶是否知道它會停止發送?Linux上的套接字如何緩衝工作
3
A
回答
4
對於UDP套接字客戶端永遠不會知道 - 服務器端將在接收緩衝區填充後開始丟棄數據包。
另一方面,TCP執行flow control。服務器的內核將逐漸減少窗口,所以客戶端將能夠發送越來越少的數據。在某個時候,窗口將降至零。此時客戶機填滿其發送緩衝區並從send(2)
收到錯誤。
1
TCP套接字在協議棧中使用緩衝。堆棧本身實現流量控制,因此如果服務器的緩衝區已滿,它將停止客戶端堆棧發送更多數據。您的代碼會將此視爲阻止致電send()
。緩衝區大小可以在幾個kB到幾個MB之間變化很大。
1
我假設您正在使用send()
和recv()
進行客戶端和服務器通信。因此,send()
將返回已發出的字節數。這並不一定等於希望發送出去的字節數,所以您需要了解這一點併發送剩餘的字節數。
現在,recv()
返回讀取到緩衝區的字節數。所以如果recv返回0,那麼服務器可能關閉了連接。
相關問題
- 1. Linux套接字緩衝數據大小
- 2. Linux套接字緩衝區不平衡
- 3. Linux套接字緩衝區如何溢出?
- 4. 套接字和緩衝區
- 5. 查詢在linux上的套接字上發送緩衝區的使用情況
- 6. Linux上的UDP套接字;發送成功但無法接收大緩衝區
- 7. C - 從UDP套接字緩衝區(Linux)讀取字節
- 8. 套接字接收緩衝區大小
- 9. 緩衝流如何工作?
- 10. 從套接字緩衝字符串流
- 11. C++套接字256字節緩衝區
- 12. 從C++緩衝區中提取IP地址(Linux套接字)
- 13. Linux套接字內核緩衝區是否交換到磁盤?
- 14. 套接字緩衝區與套接字的綁定
- 15. 緩衝來自套接字的數據?
- 16. Unix套接字的緩衝特性
- 17. C#.Net套接字緩衝區瞭解
- 18. 讀取套接字緩衝區
- 19. C++套接字緩衝區大小
- 20. 解釋套接字緩衝區請
- 21. Java套接字緩衝區問題
- 22. Node.js緩衝套接字數據
- 23. C編程套接字緩衝區
- 24. Python套接字緩衝:消息成幀
- 25. Linux套接字操作
- 26. 設置接收和發送緩衝區的套接字緩衝區大小
- 27. 有沒有可能在Linux C++中讀取在udp套接字緩衝區中緩衝了多少個字節?
- 28. OpenGL的緩衝區如何工作?
- 29. 如何在C++中使用向量作爲套接字的輸入緩衝區
- 30. 這個tcp套接字代碼如何處理rx緩衝區?