GCDAsyncUdpSocket no iOS sem datagramas multicast

Eu tenho um dispositivo na rede que é multicasting um arquivo muito pequeno via UDP. O aplicativo para iOS que estou desenvolvendo é responsável por ler esses pacotes e eu escolhi usarGCDAsyncUdpSocket para fazer isso. O arquivo é enviado a cada meio segundo, no entanto, eu não o recebo quase tão frequentemente (recebendo apenas a cada 3-10 segundos).

Pensando que pode ser um problema com o dispositivo, comecei a monitorar o tráfego com o Wireshark. Isso pareceu refletir o que eu estava vendo no meu aplicativo até que eu habilitei o "Monitor Mode" no Wireshark, em que ponto todo pacote UDP estava sendo capturado. Além disso, o simulador do iOS começou a receber todos os pacotes ausentes, pois compartilha o NIC com o Mac em que estou desenvolvendo.

Existe uma maneira de ativar o "Modo Monitor" em um dispositivo iOS ou algo que esteja faltando e que permitiria a entrada dos pacotes ausentes? Eu também vejo que existe um método readStream no GCDAsyncUdpSocket. Talvez eu precise usar isso em vez de beginReceiving? Embora eu não saiba como configurar fluxos em Objective-C, se for esse o caso.

Aqui está o meu código de teste como é agora:

- (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);
    }
}

Solução para quem vem procurando aqui no futuro:

Com base na resposta do ilmiacs, consegui reduzir significativamente o número de pacotes ausentes fazendo ping no dispositivo iOS de destino. Usando um Mac, eu corri isso no terminal -

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

Agora que estou rodando com um Mac pingando o dispositivo iOS, vou examinar os exemplos de ping do iOS da Apple e ver se consigo fazer o próprio ping do dispositivo estimular seu próprio adaptador sem fio (127.0.0.1).

questionAnswers(3)

yourAnswerToTheQuestion