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!