Я отчаянно пытаюсь выяснить, как обнаруживать ошибки при открытии потоков TCP с использованием NSStream +getStreamsToHost
/ CFStreamCreatePairWithSocket()
. Если я сделаю это:
NSInputStream* input = nil;
NSOutputStream* output = nil;
[NSStream getStreamstoHost:[NSHost hostWithName:@"localhost"] port:80 inputStream:&input outputStream:&output];
NSError* error1 = [input streamError];
assert(error1 == nil);
NSStreamStatus status1 = [input streamStatus];
[input open];
NSError* error2 = [input streamError];
assert(error2 == nil);
NSStreamStatus status2 = [input streamStatus];
status1
- это NSStreamStatusNotOpen
, что ожидается. error1
- это nil
. error2
также nil
, а status2
- NSStreamStatusOpening
. Если я telnet на тот же адрес, я получаю отказано в соединении - ничего не прослушивает порт 80. Если я пытаюсь подключиться к некоторому бессмысленному адресу, например yaddayadda
, я получаю nil
потоков.
Как правильно обрабатывать ошибки? Кажется, ни один пример не обрабатывает условия ошибки, и документы ничего об этом не говорят, кроме потоков может быть ноль. Я в тупике. Не говорите мне, что мне нужно запустить соединение через цикл выполнения, просто чтобы получить правильную обработку ошибок ...?
Я знаю, что всегда есть возможность использовать хорошие старые BSD-сокеты, но документы предупреждают об этом, так как некоторые высокоуровневые сетевые функции могут потерпеть неудачу (автоматическое подключение через VPN и т. П.).