NSStream TCP Keep-alive iOS

Napisałem ten kod, aby skonfigurować strumień z serwerem:

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

Jestem w stanie połączyć się z serwerem i wysyłać i odbierać dane. Ale chcę sprawdzić, czy połączenie nadal istnieje. Jeśli odłączę kabel od routera Wi-Fi, nadal mogę wysyłać dane w strumieniu i nie wystąpił błąd.

Możesz rozwiązać ten problem na poziomie aplikacji, używając zegara, aby wysłać wiadomość i sprawdzić, czy coś otrzymasz. Ale możesz to rozwiązać również przy pomocy techniki TCP Keep-Alive na niższym poziomie.

Jak zaimplementować to za pomocą NSStream? Jak mogę ustawić interwał sprawdzania?

Zakładam, że otrzymujesz NSStreamEventErrorOcurred, gdy strumień jest wyłączony, sprawdzając go za pomocą TCP Keep-Alive?

Sprawdziłem ten post, ale nie mogę tego zrozumieć:Utrzymanie połączenia z gniazdem w systemie iOS

Dzięki za pomoc!

questionAnswers(3)

yourAnswerToTheQuestion