2010-05-24 13 views
9

Sto tentando di leggere in modo sincrono da CFReadStream con oggetto creato da CFStreamCreatePairWithSocketToHost. Il flusso ha aperto bene, ma quando tento di richiamare CFReadStreamRead su di esso in un ciclo, CFReadStreamRead() restituisce -1 e l'errore risultante è:Dominio errore ricezione = codice kCFErrorDomainCFNetwork = 2 quando si tenta di leggere da ReadStream

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

Sto anche ricevendo lo stesso errore esatto quando si usa questo ReadStream in modo asincrono: il primo callback che ricevo è questo errore.

risposta

8

Il racconto: Probabilmente un errore di risoluzione DNS.

La documentazione dice "I flussi non aprire una connessione con l'host specificato fino a quando uno dei flussi è aperto", e per kCFGetAddrInfoFailureKey,

Interrogazione di questo tasto riporta l'ultimo codice di errore restituito da getaddrinfo (3) in risposta a una ricerca DNS. Per interpretare i risultati, cercare il codice di errore in /usr/include/netdb.h.

netdb.h dice

#define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 
+0

OK quindi qual è la correzione, allora? ! Ho una chiamata di servizio RESTful che funziona bene nel mio browser, ma la stessa richiesta tramite ASIHTTPRequest ottiene l'errore da questo post. Qualcuno sa dove andare da qui? – Mark

+2

-1 per questa risposta, per non menzionare come aggirare il errore e solo spiegando cosa significa errore. – Shailesh

+9

@Shailesh: E come, esattamente, aspettarsi di aggirare un errore DNS? –

2

sono stato in grado di risolvere questo problema mettendo in server DNS di Google (8.8.8.8,8.8.4.4) nella connessione wi-fi nella app Impostazioni. Il problema era che i nostri dispositivi erano su una rete che prima richiedeva l'accettazione di alcuni termini di servizio su una pagina web di accesso proxy, proprio come fanno gli hotel e i coffee shop. Safari ha funzionato bene dopo aver accettato, ma l'app non ha funzionato, anche dopo aver accettato Safari. Passare al DNS alternativo ha funzionato (così come inserire l'indirizzo IP al posto della voce DNS del nostro server, ma non volevo codificare un indirizzo IP).

1

Sono stato in grado di eliminare questo errore rimuovendo https:// dalla stringa host.

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

Potrebbe essere necessario impostare il livello di sicurezza adeguato:

inputStream!.setProperty(NSStreamSocketSecurityLevelTLSv1, forKey: NSStreamSocketSecurityLevelKey) 
outputStream!.setProperty(NSStreamSocketSecurityLevelTLSv1, forKey: NSStreamSocketSecurityLevelKey) 
Problemi correlati