Error Dominio=NSURLErrorDomain Código=-1005 "Se perdió la conexión de red".

Resuelto VoidStack asked hace 10 años • 0 respuestas

Tengo una aplicación que funciona bien en Xcode6-Beta1 y Xcode6-Beta2 tanto con iOS7 como con iOS8. Pero con Xcode6-Beta3, Beta4, Beta5 tengo problemas de red con iOS8 pero todo funciona bien en iOS7. Recibo el error "The network connection was lost.". El error es el siguiente:

Error: Dominio de error = Código NSURLErrorDomain = -1005 "Se perdió la conexión de red". UserInfo=0x7ba8e5b0 {NSErrorFailingURLStringKey=, _kCFStreamErrorCodeKey=57, NSErrorFailingURLKey=, NSLocalizedDescription=Se perdió la conexión de red., _kCFStreamErrorDomainKey=1, NSUnderlyingError=0x7a6957e0 "Se perdió la conexión de red."}

Utilizo AFNetworking 2.x y el siguiente fragmento de código para realizar la llamada de red:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSLog(@“Success: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          NSLog(@"Error: %@", error);
      }];

Lo intenté NSURLSessionpero sigo recibiendo el mismo error.

VoidStack avatar Aug 19 '14 04:08 VoidStack
Aceptado

Reiniciar el simulador solucionó el problema.

Collin avatar Sep 15 '2014 17:09 Collin

Tuvimos exactamente este error y resultó ser un problema con la implementación HTTP subyacente de NSURLRequest:

Por lo que sabemos, cuando iOS 8/9/10/11 recibe una respuesta HTTP con un Keep-Aliveencabezado, mantiene esta conexión para reutilizarla más tarde (como debería), pero la mantiene durante más tiempo que el timeoutparámetro del Encabezado Keep-Alive (parece mantener siempre activa la conexión durante 30 segundos). Luego, cuando la aplicación envía una segunda solicitud menos de 30 segundos después, intenta reutilizar una conexión que podría haber sido interrumpida por el servidor. (si Keep-Aliveha transcurrido más del real ).

Estas son las soluciones que hemos encontrado hasta ahora:

  • Aumente el parámetro de tiempo de espera del servidor por encima de 30 segundos. Parece que iOS siempre se comporta como si el servidor mantuviera la conexión abierta durante 30 segundos, independientemente del valor proporcionado en el encabezado Keep-Alive. (Esto se puede hacer para Apache configurando la KeepAliveTimeoutopción.
  • Simplemente puede desactivar el mecanismo de mantenimiento de conexión para clientes iOS según el agente de usuario de su aplicación (por ejemplo, para Apache: BrowserMatch "iOS 8\." nokeepaliveen el archivo mod setenvif.conf).
  • Si no tiene acceso al servidor, puede intentar enviar sus solicitudes con un Connection: closeencabezado: esto le indicará al servidor que corte la conexión inmediatamente y responda sin ningún encabezado de mantenimiento. PERO por el momento, NSURLSession parece anular el Connectionencabezado cuando se envían las solicitudes (no probamos esta solución exhaustivamente ya que podemos modificar la configuración de Apache)
Arthur avatar Sep 23 '2014 13:09 Arthur

Para el mío, Resetting content and settingsel simulador funciona. Para resetear el simulador sigue los pasos:

Simulador de iOS -> Restablecer contenido y configuración -> Presione Restablecer (en la advertencia que aparecerá)

Manab Kumar Mal avatar Oct 29 '2014 06:10 Manab Kumar Mal

El tiempo de ejecución del simulador de iOS 8.0 tiene un error por el cual si la configuración de su red cambia mientras se inicia el dispositivo simulado, las API de nivel superior (por ejemplo: CFNetwork) en el tiempo de ejecución simulado pensarán que ha perdido la conectividad de la red. Actualmente, la solución recomendada es simplemente reiniciar el dispositivo simulado cuando cambie la configuración de su red.

Si este problema lo afecta, presente radares duplicados adicionales en http://bugreport.apple.com para aumentar su prioridad.

Si ve este problema sin haber cambiado las configuraciones de red, entonces no es un error conocido y definitivamente debe presentar un radar, indicando que el problema no es el error conocido de cambio de configuración de red.

Jeremy Huddleston Sequoia avatar Sep 29 '2014 19:09 Jeremy Huddleston Sequoia