udp asyncsocket cocoaasyncsocket gcdasyncsocket

establecer el tamaño máximo de paquete para GCDAsyncUdpSocket



asyncsocket cocoaasyncsocket (1)

Sería útil saber exactamente en qué sistema operativo se encuentra, ya que la configuración varía. En OS X 10.6, mira:

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

Sin embargo, debe tener en cuenta que la unidad de transmisión máxima (MTU) de cualquier ruta de datos estará determinada por el valor más pequeño soportado por cualquier dispositivo en la ruta. En otras palabras, si un solo dispositivo o regla de software se niega a manejar datagramas más grandes que un tamaño particular, entonces ese será el límite para esa ruta. Por lo tanto, podría haber muchas configuraciones en muchos dispositivos que afectan esto. También tenga en cuenta que las reglas de MTU para IPv4 e IPv6 son radicalmente diferentes, y algunos enrutadores tienen reglas diferentes para la multidifusión contra la unidifusión.

En general, no es seguro suponer que cualquier datagrama IP mayor a un total de 576 bytes (incluidos todos los encabezados de protocolo) se permitirá, como 576 el tamaño máximo de paquete IP que IPv4 garantiza. Para IPv6, el tamaño garantizado es 1280. La mayoría de los dispositivos admitirán paquetes más grandes, pero no están obligados a hacerlo.

Estoy usando GCDAsyncUdpSocket para enviar / recibir datos a un grupo de multidifusión. En el archivo GCDAsyncUdpSocket.m, encontré la configuración siguiente y cambié el valor a 32768, por ejemplo. Pero aún no puedo recibir ningún paquete que tenga más de 9216 bytes.

max4ReceiveSize = 9216; max6ReceiveSize = 9216;

¿Hay otra configuración?

Editar: descubrí que la clase GCDAsyncUdpSocket proporcionaba un método para establecer este valor llamado setMaxReceiveIPv4BufferSize. Intenté eso, pero solo recibió alrededor de 9216 bytes.