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