Según los resultados empíricos recientes, y en base a varias publicaciones en la web, parece que una aplicación que se ejecuta en un iPhone con un punto de acceso personal habilitado no puede enviar transmisiones y / o multidifusiones a la red del punto de acceso personal. ¿Alguien puede arrojar luz sobre la causa de este problema?
La aplicación
Tengo una aplicación IOS, construida con código C ++ multiplataforma, que transmite y multica su presencia en la red en la que se está ejecutando. La aplicación funciona perfectamente cuando el iPhone está conectado a una red Wi-Fi. En este caso, otros dispositivos en la red reciben las difusiones / multidifusiones, y todo funciona correctamente. Esto se puede verificar fácilmente conectando una computadora con WireShark a la red; los paquetes de difusión / multidifusión se pueden ver en el rastreo de paquetes.
No hace falta decir que la aplicación funciona bien en un iPhone conectado a una red Wi-Fi local.
El problema
Cuando ejecuto la aplicación en un iPhone que tiene su zona de conexión personal habilitada, no se emiten emisiones / multicasts a la red de la zona de conexión. Esto se puede verificar mediante WireShark, que no muestra ningún paquete de este tipo en su seguimiento.
¿Existe alguna restricción con respecto al uso de un punto de acceso personal como un enrutador de red capaz de manejar difusiones y transmisiones múltiples?
Cuando solicité una página web en mi dispositivo "WireSharking" usando un navegador, el punto de acceso personal responde correctamente a todos los paquetes, devolviendo los contenidos web.
Información colateral
Me he encontrado con otros pasados de desbordamiento de pila que reportan los mismos problemas o similares:
- La conexión TCP no funciona correctamente cuando se usa el iPhone como punto de acceso
- No se puede enviar la difusión de ssdp por punto de acceso personal
Un buen tutorial para escribir una aplicación de difusión / multidifusión de este tipo en iPhone es " The Making of Talkie: transmisión multi-interfaz y multidifusión ". Basta con decir que mi aplicación cumple con todos los requisitos (por ejemplo, configurar las opciones de socket SO_BROADCAST, SO_DONTROUTE e IP_MULTICAST_IF cuando sea apropiado).
Una respuesta a la referencia (1) anterior escribe " ¿Podría ser porque el punto de acceso personal introduce la Traducción de direcciones de red? ". Filtré los rastros de WireShark para mostrar solo los paquetes conectados a la IP del hotspot, y no hay evidencia de que el hotspot personal envíe algo a una dirección NAT.
En resumen
¿Alguien puede explicar por qué un iPhone que ejecuta un punto de acceso personal no emite paquetes de multidifusión y cómo resolver el problema?
Muchas gracias de antemano.
P.S. Originalmente publiqué esta consulta en Desbordamiento de pila , y aprendí sobre este foro más orientado a Apple.