установить максимальный размер пакета для GCDAsyncUdpSocket - PullRequest
1 голос
/ 03 февраля 2012

Я использую GCDAsyncUdpSocket для отправки / получения данных в многоадресную группу.В файле GCDAsyncUdpSocket.m я нашел настройку ниже и изменил значение, например, на 32768.Но я все еще не могу получить пакет размером более 9216 байт.

max4ReceiveSize = 9216;
max6ReceiveSize = 9216;

Есть ли другой параметр?

Редактировать: я обнаружил, что класс GCDAsyncUdpSocket действительно предоставляет метод для установкиэто значение называется setMaxReceiveIPv4BufferSize.Пробовал это, но он все еще только получил в пределах 9216 байтов.

1 Ответ

2 голосов
/ 03 февраля 2012

Это поможет точно узнать, в какой операционной системе вы находитесь, так как настройки различаются. На OS X 10.6 посмотрите на:

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

Однако вы должны помнить, что максимальная единица передачи (MTU) любого тракта данных будет определяться наименьшим значением, поддерживаемым любым устройством в тракте. Другими словами, если только одно устройство или правило программного обеспечения отказывается обрабатывать дейтаграммы, превышающие определенный размер, это будет пределом для этого пути. Таким образом, на многих устройствах может быть много настроек, которые влияют на это. Также обратите внимание, что правила MTU для IPv4 и IPv6 радикально отличаются, а некоторые маршрутизаторы имеют разные правила для многоадресной и одноадресной рассылки.

В общем случае небезопасно предполагать, что любая дейтаграмма IP, общая длина которой превышает 576 байтов (включая все заголовки протокола), будет пропущена, поскольку 576 - максимальный размер пакета IP, который гарантируется IPv4. Для IPv6 гарантированный размер составляет 1280. Большинство устройств будут поддерживать пакеты большего размера, но они не обязаны это делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...