NSStream TCP Keep-alive iOS
He escrito este código para configurar una secuencia con un 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];
}
}
Puedo conectarme al servidor y enviar y recibir datos. Pero quiero comprobar si la conexión sigue ahí. Si desconecto un cable del enrutador wifi, todavía puedo enviar datos en la transmisión y no se produjo ningún error.
Puede resolver esto en el nivel de la aplicación utilizando un temporizador para enviar algún mensaje y verificar si recibe algo. Pero también puedes resolver esto con la técnica TCP Keep-Alive en un nivel inferior.
¿Cómo implemento esto con NSStream? ¿Cómo puedo configurar el intervalo de comprobación?
¿Supongo que obtienes un NSStreamEventErrorOcurred cuando el flujo está inactivo al verificarlo con TCP Keep-Alive?
He revisado esta publicación, pero no puedo entenderlo:Manteniendo viva una conexión de socket en iOS
¡Gracias por tu ayuda!