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

  1. 应用程序在前景和屏幕锁中运行,很好。
  2. 应用程序在后台运行,屏幕也不会锁定,也很好(我使用NSStream来发送和接收在后台的keep应用程序,它可以正常运行。)
  3. 应用程序在后台和屏幕锁中运行,应用程序正常运行,但是当应用程序尝试通过UDP或TCP套接字调用SendTo()或Send()时,请始终获得SigPipe错误。

我搜索很多,但没有任何有用的 这里 我知道什么是sigpipe,并且我使用setSockopt(sock,sol_socket,so_nosigpipe,(void *)和on,sizeof(int))来避免App异常退出。但是我仍然不知道为什么此错误仅在情况3中发生,以及在这种情况下如何通过BSD插座正常发送数据。


我已经尝试续订和重新连接,但它行不通,它仍然会遇到sigpipe错误。我认为也许所有BSD插座都无法在情况3中获得内部访问(据我们所知,BSD插座无法激活iOS中的WiFi或Edge连接),任何人都可以帮助我或给我一些建议?对不起,我的英语破损^。^,非常感谢您。

有帮助吗?

解决方案

我在Google上搜索,并在10个月前找到了自己的问题,这很有趣。我已经有一个用于应用程序在后台运行的解决方案,setSockopt(sock,sol_socket,so_nosigpipe,(void *)和on,sizeof(int))很有用,它将忽略sigpipe 13错误。

当插座已经失去物理连接并仍尝试通过WiFi,3G或配件编写数据时,就会发生此错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top