设置GCDAsyncUdpSocket的最大数据包大小

设置GCDAsyncUdpSocket的最大数据包大小,udp,asyncsocket,cocoaasyncsocket,gcdasyncsocket,Udp,Asyncsocket,Cocoaasyncsocket,Gcdasyncsocket,我正在使用GCDAsyncUdpSocket向多播组发送/接收数据。例如,在GCDAsyncUdpSocket.m文件中,我找到了下面的设置,并将值更改为32768。但我仍然无法接收任何大于9216字节的数据包 max4ReceiveSize = 9216; max6ReceiveSize = 9216; 还有其他设置吗 编辑: 我发现GCDAsyncUdpSocket类确实提供了一个名为setMaxReceiveIPv4BufferSize的方法来设置这个值。尝试过了,但它仍然只收到9216

我正在使用GCDAsyncUdpSocket向多播组发送/接收数据。例如,在GCDAsyncUdpSocket.m文件中,我找到了下面的设置,并将值更改为32768。但我仍然无法接收任何大于9216字节的数据包

max4ReceiveSize = 9216;
max6ReceiveSize = 9216;
还有其他设置吗

编辑:
我发现GCDAsyncUdpSocket类确实提供了一个名为setMaxReceiveIPv4BufferSize的方法来设置这个值。尝试过了,但它仍然只收到9216字节左右的数据。

随着设置的不同,准确地知道您使用的是哪个操作系统会有所帮助。在OS X 10.6上,请查看:

max4ReceiveSize = 9216;
max6ReceiveSize = 9216;
# sysctl net.inet.udp.maxdgram
net.inet.udp.maxdgram: 9216
但是,您必须记住,任何数据路径的最大传输单位(MTU)将由路径中任何设备支持的最小值确定。换句话说,如果只有一个设备或软件规则拒绝处理大于特定大小的数据报,那么这将是该路径的限制。因此,许多设备上可能有许多设置会影响这一点。还请注意,IPv4和IPv6的MTU规则完全不同,一些路由器对多播和单播有不同的规则


一般来说,假设任何大于576字节(包括所有协议头)的IP数据报都将被允许通过是不安全的,因为576是IPv4保证支持的最大IP数据包大小。对于IPv6,保证的大小为1280。大多数设备将支持更大的数据包,但它们不是必需的。

GCDAsyncUdpSocket是一个Mac和iOS库,如下所示:正确,但我们谈论的OSX或iOS版本很重要,因为各种系统设置的名称和默认值在不同版本中会发生变化。如果您知道您将使用特定的环境,您可以根据该环境定制代码或调整环境。但是,如果你需要处理一般情况,你必须准备好处理小数据报。根据上述库的作者所说,我遇到了sou RCVBUF问题。您知道如何读取iOS和Mac允许的最大值吗?顺便说一句:我知道一些技术含义,你原来的答案上面。在这种情况下,假设10.5或更高版本,你可能想要
I=1048576;插座(s、SOL_插座、SO_RCVBUF和i、sizeof(i))
并对
SO\u SNDBUF
执行相同的操作。iOS 3或更高版本可能是相同的。看起来9k也是Windows的设置。感谢您提供的信息。您好,如何接收大于9216字节的数据包。请说