NSStream TCP Keep-alive iOS

Eu escrevi este código para configurar um fluxo com um servidor:

-(void)streamOpenWithIp:(NSString *)ip withPortNumber:(int)portNumber;
{
       CFReadStreamRef readStream;
       CFWriteStreamRef writeStream;
       CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)ip, portNumber, &readStream, &writeStream);

       if(readStream && writeStream)
       {
            CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
            CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);

            //Setup inpustream
            inputStream = (__bridge NSInputStream *)readStream;
            [inputStream setDelegate:self];
            [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [inputStream open];

            //Setup outputstream
            outputStream = (__bridge NSOutputStream *)writeStream;
            [outputStream setDelegate:self];
            [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [outputStream open];
       }
}

Eu sou capaz de se conectar ao servidor e enviar e receber dados. Mas quero verificar se a conexão ainda está lá. Se eu desconectar um cabo do roteador wifi, ainda posso enviar dados no fluxo e nenhum erro ocorreu.

Você pode resolver isso no nível do aplicativo usando um timer para enviar alguma mensagem e verificar se recebe algo de volta. Mas você pode resolver isso também com a técnica TCP Keep-Alive em um nível inferior.

Como faço para implementar isso com o NSStream? Como posso definir o intervalo de verificação?

Eu suponho que você obtenha um NSStreamEventErrorOcurred quando o fluxo está baixo, verificando-o com TCP Keep-Alive?

Eu verifiquei este post, mas não consigo descobrir:Mantendo uma conexão de soquete viva no iOS

Obrigado pela ajuda!

questionAnswers(3)

yourAnswerToTheQuestion