当前位置:  开发笔记 > 程序员 > 正文

sendto的最大缓冲区长度是多少?

如何解决《sendto的最大缓冲区长度是多少?》经验,为你挑选了2个好方法。

如何获得可以传递给sendto(..)作为UDP端口打开的套接字的调用的最大字节数?



1> Steve M..:

使用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字节.



2> diciu..:

在Mac OS X上,发送(SO_SNDBUF)和接收(SO_RCVBUF)的值不同.这是发送缓冲区的大小(man getsockopt):

getsockopt(sock,SOL_SOCKET,SO_SNDBUF,(int*)&optval,&optlen);

尝试发送更大的消息(在通过本地环回发送的UDP上的Leopard 9216八位字节)将导致"消息太长/ EMSGSIZE".

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有