我在我的应用程序中使用BSD套接字在iphone4(iOS4.1)上发送和接收数据,我的应用程序中有三种情况:
- 应用程序在前台和屏幕锁定中运行,这很好。
- 应用程序在后台运行并且屏幕没有锁定,这也很好(我使用 NSStream 发送和接收数据以使应用程序在后台保持活动状态,它工作正常。)
- 应用程序在后台和屏幕锁定中运行,应用程序运行良好,但当应用程序尝试通过 UDP 或 TCP 套接字调用 sendto() 或 send() 时,总是会收到 SIGPIPE 错误。
我搜索了很多但没有任何用处,从这里我知道 SIGPIPE 是什么,并且我使用 setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void *)&on, sizeof(int)) 来避免应用程序异常退出。但我仍然不知道为什么这个错误只发生在情况 3 以及在这种情况下如何通过 bsd 套接字正常发送数据。
我尝试更新并重新连接,但它不起作用,它仍然得到 SIGPIPE 错误。我认为可能是所有 BSD 套接字在情况 3 中都无法获得内部访问(据我们所知,BSD 套接字无法在 iOS 中激活 wifi 或 EDGE 连接),任何人都可以帮助我或给我一些建议吗?对不起我的英语不好^.^,非常感谢。