如何获得可以传递给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. 协议缓冲区:无固定大小缓冲区的符号?