我正在使用GCDAsyncUdpSocket向多播组发送/接收数据。在GCDAsyncUdpSocket.m文件中,我发现设置如下,并将值更改为32768。但我仍然无法收到任何大于9216字节的数据包。
max4ReceiveSize = 9216;
max6ReceiveSize = 9216;
还有其他设置吗?
编辑: 我发现GCDAsyncUdpSocket类确实提供了一个设置此值的方法,名为setMaxReceiveIPv4BufferSize。尝试过,但它仍然只收到大约9216字节。
答案 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.大多数设备将支持更大的数据包,但不需要它们。