GCDAsyncUdpSocket en iOS que faltan datagramas múltiples

Tengo un dispositivo en la red que está multidifundiendo un archivo muy pequeño a través de UDP. La aplicación iOS que estoy desarrollando es responsable de leer estos paquetes y he elegido usarGCDAsyncUdpSocket para hacerlo El archivo se envía cada medio segundo, sin embargo, no lo recibo tan a menudo (solo recibo cada 3-10 segundos).

Pensando que podría ser un problema con el dispositivo, comencé a monitorear el tráfico con Wireshark. Esto pareció reflejar lo que estaba viendo en mi aplicación hasta que habilité el "Modo de monitor" en Wireshark, momento en el que se capturó cada paquete UDP. Además, el simulador de iOS comenzó a recibir todos los paquetes faltantes ya que comparte la NIC con la Mac que estoy desarrollando.

¿Hay alguna forma de habilitar el "Modo de monitor" en un dispositivo iOS o algo que me esté faltando y que permita que entren los paquetes faltantes? También veo que hay un método readStream en GCDAsyncUdpSocket. ¿Quizás necesito usar esto en lugar de comenzar a recibir? Aunque no sé cómo configurar flujos en Objective-C si ese es el caso.

Aquí está mi código de prueba como lo es ahora:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSLog(@"View Loaded");
    [self setupSocket];             
}

- (void)setupSocket
{
    udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    NSError *error = nil;
    if (![udpSocket bindToPort:5555 error:&error])
    {
        NSLog(@"Error binding to port: %@", error);
        return;
    }
    if(![udpSocket joinMulticastGroup:@"226.1.1.1" error:&error]){
        NSLog(@"Error connecting to multicast group: %@", error);
        return;
    }
    if (![udpSocket beginReceiving:&error])
    {
        NSLog(@"Error receiving: %@", error);
        return;
    }
    NSLog(@"Socket Ready");
}

- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
      fromAddress:(NSData *)address
withFilterContext:(id)filterContext
{
    NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    if (msg)
    {
        NSLog(@"RCV: %@", msg);
    }
    else
    {
        NSString *host = nil;
        uint16_t port = 0;
        [GCDAsyncUdpSocket getHost:&host port:&port fromAddress:address];
        NSLog(@"Unknown message from : %@:%hu", host, port);
    }
}

Solución para cualquiera que venga a buscar aquí en el futuro:

Basándome en la respuesta de ilmiacs, pude reducir significativamente la cantidad de paquetes faltantes haciendo ping al dispositivo iOS de destino. Usando una Mac, ejecuté esto en la terminal -

sudo ping -i 0.2 -s 4 <Target IP>

Ahora que lo tengo funcionando con una Mac que hace ping al dispositivo con iOS, voy a ver los ejemplos de ping de iOS de Apple y ver si puedo hacer que el dispositivo haga ping para estimular su propio adaptador inalámbrico (127.0.0.1).

Respuestas a la pregunta(3)

Su respuesta a la pregunta