AFNetworking / NSURLConnection que recibe NSPOSIXErrorDomain Code = 9 "La operación no se pudo completar. Descriptor de file incorrecto"

En mi aplicación que utiliza AFNetworking / NSURLConnection para enviar requestes al server, a veces (muy rara vez) veo este error en el bloque de falla de operación:

Error Domain=NSPOSIXErrorDomain Code=9 "The operation couldn't be completed. Bad file descriptor" 

En https://devforums.apple.com/message/278770#278770 hay una respuesta a una pregunta similar:

Significa que alguien ha desasignado descriptores de file desde debajo de NSURLConnection.

Pero en mi propio código no toco ninguna secuencia de descriptores de files de ninguna manera. Es solo requestes GET / POST simples.

¿Cúal podría ser la causa de este problema?

¿Alguien ha encontrado este error en sus operaciones de AFNetworking?

Además, ¿cómo puedo cerrar este descriptor de file deliberadamente si realmente quisiera? La respuesta a esta pregunta me ayudará a comprender mejor el problema.

De acuerdo con este Apple TechNote sobre multitarea y networkinges, puede get EBADF (POSIX error 9) si la aplicación está suspendida y el socket se recupera.

Nota: cuando la aplicación reanude la ejecución, el error real devuelto por un socket cuyos resources han sido reclamados no se especifica a propósito aquí para permitir mejoras futuras. Sin embargo, en muchos casos, el error será EBADF , ¡que probablemente no sea lo que esperaba! En circunstancias normales, EBADF significa que la aplicación ha pasado un descriptor de file no válido a una llamada del sistema. Sin embargo, en el caso de un socket cuyos resources han sido reclamados, no significa que el descriptor del file no sea válido, solo que el socket ya no se puede usar.

(No creo que sea una respuesta completa, pero espero que sea útil y se pueda convertir en una sola).

El error que estás viendo es EBADF . Se devuelve de operar con un file cerrado. Pero ya has descubierto esto. 🙂

Suponiendo que no está utilizando la biblioteca stdio, creo que lo que está encontrando es el equivalente de un exceso de time. Básicamente, está transfiriendo la propiedad de un file a algo, que luego lo cierra.

Debe prestar especial atención a NSFileHandle , especialmente para ver si usted o alguien está llamando a initWithFileDescriptor: copy de un file, etc. Esto podría hacer que NSFileHandle del descriptor de file, lo que significa cerrarlo cuando se desasigna.

Mira less tu código de networking y más sobre cómo estás configurando los files.