5

私はiPhoneアプリでAsyncUDPSocketサードパーティライブラリを使用していますが、ほとんどの場合、それはうまく機能します。AsyncUDPSocketすべてのネットワークトラフィックに使用するのシングルトンインスタンスがあります。私のアプリはバックグラウンドで位置追跡用に登録されており、バックグラウンドで実行している間、ウェイクアップしてネットワーク経由で位置更新パケットを送信します。これはすべて、次の場合を除いて、バックグラウンド、フォアグラウンド、電話のロックまたはロック解除で大胆に実行されます。

  1. アプリを起動します
  2. アプリの設定で位置追跡を無効にします(バックグラウンドでウェイクアップしないようにします)
  3. ホームボタンを押します(アプリはバックグラウンドになり、ソケットはアプリの残りの部分と一緒に「フリーズドライ」されます)
  4. 電話をロックする
  5. 電話のロックを解除する
  6. アプリを再開
  7. 追跡を再開して、ソケットから何かを送信してみてください。試してみるとすぐにSIGPIPE/EPIPEエラーが発生し、アプリがクラッシュします。

これに対処する最善の方法は、アプリケーションが終了し、バックグラウンドトラッキングが有効になっていないときはいつでもソケットを閉じて解放することだと思いましたが、試してみると、[socket close]さまざまなエラーが発生します。私は開発チームにバグを報告しましたが、ここの誰かがエラーを完全に回避する方法、またはソケットを解放せずに存続させる他の方法についてアイデアを与えることができるかどうか疑問に思いました。ありがとう。[socket release]AsyncUDPSocketEXC_BAD_ACCESSSIGPIPE

4

2 に答える 2

2

すばらしい観察-はい、タスクをバックグラウンドに送信してから電話をロックすると、ソケットがドロップされ、次にそれを使用しようとすると、SIGPIPEで殴打されるようです。

ここでそれを処理する方法のアイデア: バックグラウンドタスクを切り替えるとSIGPIPEがクラッシュします (アプリ全体またはソケットのSIGPIPEを無視するように設定するか、ハンラーを提供します)

ps。また、SIGPIPEを無視するように設定すると、接続されているデバッガーでは機能しないようです。

于 2011-11-26T05:50:49.017 に答える
1

誰かが興味を持った場合に備えて(この質問の統計から判断すると、そうではありません)、SIGPIPEエラーの原因を特定できませんでしたが、最終的にはメモリ管理の問題を解決しました(これはonUdpSocketDidCloseアプリが再起動するたびにソケットを再初期化できるように、デリゲートで)。

于 2011-06-24T14:16:07.767 に答える