如何獲得可以傳遞給sendto(..)
呼叫的最大字節數作爲UDP端口打開的套接字?sendto的最大緩衝區長度?
7
A
回答
1
由於UDP不是面向連接的,所以沒有辦法指出兩個數據包屬於一起。因此,您受限於單個IP數據包的最大大小(65535)。您可以發送的數據少一點,因爲IP數據包的大小還包括IP標頭(通常爲20個字節)和UDP標頭(8個字節)。
請注意,此IP數據包可以分段以適應較小的數據包(例如,~1500字節用於以太網)。
我不知道任何操作系統進一步限制這一點。
11
使用getsockopt()。 This site對您可以檢索的使用情況和選項有很好的細分。
在Windows中,你可以這樣做:
int optlen = sizeof(int); int optval; getsockopt(socket, SOL_SOCKET, SO_MAX_MSG_SIZE, (int *)&optval, &optlen);
對於Linux,根據UDP手冊頁,內核將使用MTU發現(它會檢查最大的UDP數據包大小是什麼在這裏和目的地之間,並選擇它),或者如果MTU發現關閉,它會將最大大小設置爲接口MTU並對任何更大的碎片進行碎片化。如果您通過以太網發送數據,則典型MTU爲1500字節。
5
在Mac OS X上,發送(SO_SNDBUF)和接收(SO_RCVBUF)的值不同。 這是發送緩衝區(人的getsockopt)的大小:
的getsockopt(襪子,SOL_SOCKET,SO_SNDBUF,爲(int *)& optval的,& optlen);
嘗試發送更大的消息(在通過本地回送發送的UDP上的Leopard 9216八位字節)將導致「消息太長/ EMSGSIZE」。
相關問題
- 1. 緩衝區溢出緩衝區長度
- 2. UDP sendto()和recvfrom()最大緩衝區大小
- 3. Scala緩衝區:大小還是長度?
- 4. AF_UNIX插槽中緩衝區的最大長度
- 5. WDF EvtIoDeviceControl緩衝區長度
- 6. GetPrivateProfileString - 緩衝區長度
- 7. OpenGL深度緩衝區最大距離
- 8. 調整AudioUnit緩衝區的長度
- 9. 如何增加MySQL緩衝區長度?
- 10. Nightmare.js截圖緩衝區長度0
- 11. 文檔長度不等於緩衝區
- 12. SignalR System.InvalidOperationException:緩衝區長度超過
- 13. ObjectOutputStream最大緩衝區大小
- 14. Emacs ansi-term最大緩衝區大小?
- 15. 讀取浮點的最小緩衝區長度
- 16. 緩衝區的最大數量
- 17. ENSIME服務器緩衝區的限制長度;掛鉤這個緩衝區
- 18. C#Networkstream BeginRead如何獲取緩衝區長度/大小?
- 19. TCP緩衝區中的包總長度是否可以超過分配的緩衝區大小?
- 20. 將未知長度的緩衝區複製到C中的固定大小緩衝區中
- 21. 最佳緩衝區大小 - TCP
- 22. recvfrom最大緩衝區TCP/IP
- 23. Android最佳緩衝區大小
- 24. 將深度渲染緩衝區複製到深度緩衝區
- 25. execv的緩衝區大小
- 26. BufferedInputStream的緩衝區大小
- 27. 緩衝區長度以流密碼增長
- 28. sendto()與未初始化的字符*緩衝區
- 29. 大緩衝區開關與小緩衝區開關的成本
- 30. 協議緩衝區:無固定大小緩衝區的符號?