【问题标题】:SIGPIPE error in iOS4 when app is running background and lock screen当应用程序运行后台和锁定屏幕时,iOS4 中的 SIGPIPE 错误
【发布时间】:2011-09-10 01:07:07
【问题描述】:

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

  1. 应用程序在前台和屏幕锁定中运行,这很好。
  2. 应用程序在后台运行,屏幕没有锁定,也很好(我使用 NSStream 发送和接收数据以保持应用程序在后台运行,它工作正常。)
  3. 应用程序在后台和屏幕锁定中运行,应用程序运行正常,但当应用程序尝试通过 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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多