Я отчаянно пытаюсь понять, как обнаруживать ошибки при открытии потоков 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
. Если я подключаюсь к тому же адресу, я получаю сообщение об отказе в соединении - на порту 80 ничего не прослушивается. Если я пытаюсь подключиться к какому-то бессмысленному адресу, например yaddayadda
, я получаю nil
потоков.
Как правильно обрабатывать ошибки? Кажется, ни один пример нигде не обрабатывает условия ошибки, и документы ничего не говорят об этом, за исключением того, что потоки могут быть нулевыми. Я в тупике. Не говорите мне, что мне нужно запустить соединение через цикл выполнения, просто чтобы получить правильную обработку ошибок...?
Я знаю, что всегда есть возможность использовать старые добрые сокеты BSD, но документация предостерегает от этого, так как некоторые сетевые функции высокого уровня могут выйти из строя (автоматическое подключение через VPN и тому подобное).