设置GCDAsyncUdpSocket的最大数据包大小

时间:2012-02-03 02:57:16

标签: udp asyncsocket cocoaasyncsocket gcdasyncsocket

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

max4ReceiveSize = 9216;
max6ReceiveSize = 9216;

还有其他设置吗?

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

1 个答案:

答案 0 :(得分:2)

随着设置的变化,确切地知道您所使用的操作系统将会有所帮助。在OS X 10.6上,请查看:

# sysctl net.inet.udp.maxdgram
net.inet.udp.maxdgram: 9216

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

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