1

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

  1. 应用程序在前台和屏幕锁定中运行,这很好。
  2. 应用程序在后台运行并且屏幕没有锁定,这也很好(我使用 NSStream 发送和接收数据以使应用程序在后台保持活动状态,它工作正常。)
  3. 应用程序在后台和屏幕锁定中运行,应用程序运行良好,但当应用程序尝试通过 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 连接),任何人都可以帮助我或给我一些建议吗?对不起我的英语不好^.^,非常感谢。

4

1 回答 1

7

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

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

于 2011-09-09T17:07:07.217 回答