【发布时间】:2011-06-16 20:07:45
【问题描述】:
我在我的 iPhone 应用程序中使用了 AsyncUDPSocket 第三方库,并且大部分情况下它都很好用。我有一个 AsyncUDPSocket 的单例实例,用于所有网络流量。我的应用程序在后台注册了位置跟踪,并且在后台运行时将唤醒并通过网络发送位置更新数据包。这一切都可以在后台、前台、手机锁定或解锁中运行,除非我执行以下操作:
- 启动我的应用程序
- 在我的应用设置中禁用位置跟踪 (所以没有背景唤醒)
- 按下主页按钮(应用程序进入后台,套接字与应用程序的其余部分“冻干”)
- 锁定手机
- 解锁手机
- 恢复应用
- 尝试重新启动跟踪并从套接字发送一些东西。我一尝试,就会收到
SIGPIPE/EPIPE错误并且应用程序崩溃。
我认为解决这个问题的最佳方法是在应用程序退出并且未启用后台跟踪时关闭并释放套接字,但是当我在 AsyncUDPSocket 上尝试 [socket close] 或 [socket release] 时,我得到了各种EXC_BAD_ACCESS 错误。我已经向开发团队提交了一个错误,但想知道这里是否有人可以就如何完全避免 SIGPIPE 错误或其他方法在不释放套接字的情况下保持套接字存活提出一些想法。谢谢。
【问题讨论】:
标签: iphone objective-c sockets asyncsocket sigpipe