如何获取以UDP端口打开的套接字的
sendto(..)
调用可以传递的最大字节数?sendto(..)
调用可以传递的最大字节数?使用getsockopt()函数。这个网站对其用法和可检索选项进行了良好的解释。
在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字节。
在Mac OS X上,发送(SO_SNDBUF)和接收(SO_RCVBUF)有不同的值。 这是发送缓冲区的大小(man getsockopt):
getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (int *)&optval, &optlen);
如果在Leopard上尝试通过本地回环发送9216个八位组的UDP消息,将会导致“消息过长/EMSGSIZE”的错误。