Soquete de VoIP no iOS - nenhuma notificação recebida

Eu tenho um aplicativo VoIP que usa um serviço TCP para ativá-lo em chamadas recebidas. O soquete TCP é criado com este fragmento de código:

CFReadStreamRef read = NULL;
CFWriteStreamRef write = NULL;
...
CFStreamCreatePairWithSocketToHost(NULL,(__bridge CFStringRef)shost, port, &read, &write);
self.read = (__bridge NSInputStream*)read;
self.write = (__bridge NSOutputStream*)write;
if (![self.read setProperty:NSStreamNetworkServiceTypeVoIP
                     forKey:NSStreamNetworkServiceType]){
    [Log log:@"Could not set VoIP mode to read stream"];
}
if (![self.write setProperty:NSStreamNetworkServiceTypeVoIP
                      forKey:NSStreamNetworkServiceType]){
    [Log log:@"Could not set VoIP mode to write stream"];
}
self.read.delegate = self;
self.write.delegate = self;
CFRelease(read);
CFRelease(write);
[self.read scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[self.write scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[self.read open];
[self.write open];

Eu também defini o seguinte:

VoIP e Áudio no plist de informaçãoMantenha o timer ativo usando [UIApplication sharedApplication] setKeepAliveTimeoutUIRequiresPersistentWiFi = YES no info plist (com certeza não é obrigatório, mas ...)

Isso funciona bem enquanto o aplicativo está em primeiro plano e até funciona bem em segundo plano por alguns minutos, mas depois de alguns minutos - o aplicativo não recebe novas mensagens TCP. Não funciona em wifi ou 3G, mesmo resultado para ambos.

Eu também tentei definir a propriedade apenas para o fluxo de leitura (embora o ponto de leitura e gravação para o mesmo soquete). Sempre que recebo dados sobre o TCP ou envio dados, inicio também uma pequena tarefa em segundo plano. BTW - tudo acontece no thread principal.
Eu verifiquei se o aplicativo trava - não.
O mesmo comportamento pode ser observado durante a depuração no dispositivo - depois de um tempo - nada é recebido (sem falhas, avisos, qualquer coisa).

O que estou fazendo de errado?

questionAnswers(3)

yourAnswerToTheQuestion