Ошибка получения Domain = kCFErrorDomainCFNetwork Code = 2 при попытке чтения из ReadStream - PullRequest
11 голосов
/ 24 мая 2010

Я пытаюсь синхронно прочитать объект CFReadStream, созданный CFStreamCreatePairWithSocketToHost.Поток открылся нормально, но когда я пытаюсь вызвать CFReadStreamRead в нем в цикле, CFReadStreamRead () возвращает -1, и в результате получается ошибка:

Error Domain=kCFErrorDomainCFNetwork Code=2 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error 2.)" UserInfo=0x14a920 {kCFGetAddrInfoFailureKey=8}

Я тожеполучение этой же точной ошибки при асинхронном использовании ReadStream - первый ответный вызов, который я получаю, - это ошибка.

Ответы [ 3 ]

8 голосов
/ 25 мая 2010

Короткая история: Вероятно, сбой разрешения DNS.

В документах сказано: "Потоки не открывают соединение с указанным хостом, пока не открыт один из потоков", а для kCFGetAddrInfoFailureKey,

Запрос этого ключа возвращает последний код ошибки, возвращенный getaddrinfo (3) в ответ на поиск DNS. Чтобы интерпретировать результаты, найдите код ошибки в /usr/include/netdb.h.

netdb.h говорит

#define EAI_NONAME  8  /* hostname nor servname provided, or not known */
2 голосов
/ 01 июня 2015

Мне удалось устранить эту ошибку, удалив https:// из строки хоста.

NSStream.getStreamsToHostWithName ("https://example.com" ...

Возможно, вам потребуется установить соответствующий уровень безопасности:

 inputStream!.setProperty(NSStreamSocketSecurityLevelTLSv1, forKey: NSStreamSocketSecurityLevelKey)
outputStream!.setProperty(NSStreamSocketSecurityLevelTLSv1, forKey: NSStreamSocketSecurityLevelKey)
2 голосов
/ 16 сентября 2011

Мне удалось это исправить, вставив DNS-серверы Google (8.8.8.8,8.8.4.4) в соединение Wi-Fi в приложении «Настройки».Проблема заключалась в том, что наши устройства были в сети, которая сначала требовала, чтобы вы согласились с некоторыми условиями обслуживания на веб-странице входа через прокси-сервер, как это делают отели и кафе.После согласования Safari работал нормально, а приложение - даже после согласования в Safari.Переключение на альтернативный DNS работало (так же, как и вставка IP-адреса вместо записи DNS нашего сервера, но я не хотел жестко кодировать IP-адрес).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...