Получение домена ошибки=Kcferrordomaincfnetwork Code=2 при попытке чтения из ReadStream
Я пытаюсь синхронно читать из 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 ответов
короткая история: вероятно, сбой разрешения DNS.
в документах говорится: "потоки не открывают соединение с указанным хостом, пока не будет открыт один из потоков", а для kCFGetAddrInfoFailureKey,
запрос этого ключа возвращает последний код ошибки, возвращенный getaddrinfo (3) в ответ на поиск DNS. Чтобы интерпретировать результаты, найдите код ошибки в /usr/include / netdb.h.
netdb.ч говорит
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
Я смог исправить это, поместив DNS-серверы Google (8.8.8.8,8.8.4.4) в wifi-соединение в приложении "Настройки". Проблема заключалась в том, что наши устройства были в сети, которая сначала требовала, чтобы вы согласились с некоторыми условиями обслуживания на веб-странице входа прокси, так же, как отели и кафе. Safari отлично работал после согласования, но приложение не работало, даже после согласования в Safari. Переключение на альтернативный DNS работало (так же как и ввод IP-адреса вместо записи DNS нашего сервера, но я не хотел жестко кодировать IP-адрес).
я смог устранить эту ошибку путем удаления https://
из строки хоста.
NSStream.getStreamsToHostWithName (" https://example.com"...
возможно, Вам потребуется установить соответствующий уровень безопасности:
inputStream!.setProperty(NSStreamSocketSecurityLevelTLSv1, forKey: NSStreamSocketSecurityLevelKey)
outputStream!.setProperty(NSStreamSocketSecurityLevelTLSv1, forKey: NSStreamSocketSecurityLevelKey)