当应用程序运行后台和锁定屏幕时,iOS4中的SIGPIPE错误

时间:2010-11-03 08:51:47

标签: iphone background sockets sigpipe

我在我的应用程序中使用BSD套接字在iphone4(iOS4.1)上发送和接收数据,我的应用程序有三种情况:

  1. app正在前台和屏幕锁定中运行,没关系。
  2. 应用程序在后台运行,屏幕无法锁定,它也很好(我使用NSStream发送和接收数据以保持app在后台运行,它运行正常。)
  3. app在后台和屏幕锁定中运行,应用程序正常运行,但当app尝试通过UDP或TCP套接字调用sendto()或send()时,始终会收到SIGPIPE错误。
  4. 我经常搜索但没有任何用处,来自here我知道SIGPIPE是什么,我使用setsockopt(sock,SOL_SOCKET,SO_NOSIGPIPE,(void *)& on,sizeof(int))来避免app退出异常。但我仍然不知道为什么这个错误只发生在情况3中,以及如何在这种情况下通过bsd套接字正常发送数据。


    我尝试续订并重新连接,但它不起作用,它仍然会收到SIGPIPE错误。   我认为可能所有BSD套接字都无法在情境3中获得内部访问(据我们所知,BSD套接字无法在iOS中激活wifi或EDGE连接),任何人都可以帮助我或给我一些建议吗?抱歉我的破碎的英语^。^,非常感谢。

1 个答案:

答案 0 :(得分:7)

我在google上搜索并在10个月前找到了我自己的问题,这很有意思。 我已经有了一个应用程序保持在后台运行的解决方案,setsockopt(sock,SOL_SOCKET,SO_NOSIGPIPE,(void *)& on,sizeof(int))非常有用,它将忽略Sigpipe 13错误。

当套接字已经丢失物理连接但仍尝试通过Wifi,3G或附件写入数据时,会发生此错误。