AFNetworking / NSURLConnection接收NSPOSIXErrorDomain Code = 9“操作无法完成。错误的文件描述符”

时间:2014-02-27 06:44:36

标签: ios nsurlconnection afnetworking

在我的应用程序中使用AFNetworking / NSURLConnection向服务器发送请求我有时(很少)在操作失败块中看到此错误:

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

https://devforums.apple.com/message/278770#278770,有一个类似问题的答案:

  

这意味着某人已从NSURLConnection下面取消分配文件描述符。

但是在我自己的代码中,我不会以任何方式触及任何文件描述符流。这只是简单的GET / POST请求。

造成这个问题的原因是什么?

有人在AFNetworking操作中遇到此错误吗?

另外,如果我真的想要如何故意关闭此文件描述符?这个问题的答案将帮助我更好地理解这个问题。

2 个答案:

答案 0 :(得分:2)

(我不认为这是一个完整的答案,但我希望它会有所帮助,可以变成一个。)

您正在查看的错误EBADF。它是通过关闭文件操作返回的。但是你已经想到了这一点。 :)

假设您没有使用stdio库,我认为您遇到的相当于过度发布。基本上,你将文件的所有权交给某个东西,然后关闭它。

您应该特别注意NSFileHandle,尤其是要查看您或任何人是否正在调用initWithFileDescriptor:copy文件等。这些可能导致{{1}取得文件描述符的所有权,这意味着在解除分配时关闭它。

少看你的网络代码,更多关注你如何设置文件。

答案 1 :(得分:1)

根据this Apple TechNote多任务和网络,如果应用程序被挂起并且回收套接字,则可以获得EBADF(POSIX错误9)。

  

注意:当您的应用程序恢复执行时,a返回的实际错误   其资源被回收的套接字故意不是   在此指定以允许将来的改进。但是,在许多情况下   错误将是EBADF,这可能不是你的错   期待!在正常情况下,EBADF表示该应用具有   将无效的文件描述符传递给系统调用。但是,在   已经回收资源的套接字的情况,并不意味着   文件描述符无效,只是套接字是否   更长的可用时间。