当应用程序运行背景和锁定屏幕时,ios4中的sigpipe错误
-
28-09-2019 - |
题
我在应用程序中使用BSD套接字在iPhone4(ios4.1)上发送和接收数据,我的应用中有三个情况:
- 应用程序在前景和屏幕锁中运行,很好。
- 应用程序在后台运行,屏幕也不会锁定,也很好(我使用NSStream来发送和接收在后台的keep应用程序,它可以正常运行。)
- 应用程序在后台和屏幕锁中运行,应用程序正常运行,但是当应用程序尝试通过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或配件编写数据时,就会发生此错误。
不隶属于 StackOverflow