1

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

max4ReceiveSize = 9216;
max6ReceiveSize = 9216;

有没有别的设置?

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

4

1 回答 1

2

由于设置不同,因此准确了解您使用的操作系统会有所帮助。在 OS X 10.6 上,查看:

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

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

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

于 2012-02-03T15:20:55.437 回答