1

アプリで BSD ソケットを使用して iphone4 (iOS4.1) でデータを送受信します。アプリには 3 つの状況があります。

  1. アプリはフォアグラウンドで実行され、画面がロックされていますが、問題ありません。
  2. アプリはバックグラウンドで実行されており、画面がロックされていません。これも問題ありません(NSStreamを使用して、アプリをバックグラウンドで維持するためのデータを送受信していますが、正常に動作します。)
  3. アプリはバックグラウンドおよび画面ロックで実行され、アプリは正常に実行されますが、アプリが UDP または TCP ソケットを介して sendto() または send() を呼び出そうとすると、常に SIGPIPE エラーが発生します。

私はたくさん検索しますが、何も役に立ちません。ここから、SIGPIPEが何であるかを知っています.setsockopt(sock、SOL_SOCKET、SO_NOSIGPIPE、(void *)&on、sizeof(int))を使用して、アプリの異常終了を回避します。しかし、このエラーが状況3でのみ発生した理由と、この状況でbsdソケットを介してデータを正常に送信する方法はまだわかりません。


更新して再接続しようとしましたが、うまくいきません。それでも SIGPIPE エラーが発生します。状況 3 では、すべての BSD ソケットが内部アクセスを取得できない可能性があると思います (BSD ソケットが iOS で wifi または EDGE 接続を有効にできないことがわかっている限り)。私の壊れた英語で申し訳ありません^.^、どうもありがとうございました。

4

1 に答える 1

7

Google で検索したところ、10 か月前に自分の質問が見つかりました。これは興味深いことです。アプリケーションをバックグラウンドで実行し続けるためのソリューションが既にあり、Sigpipe 13 エラーを無視する setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (void *)&on, sizeof(int)) が便利です。

このエラーは、ソケットがすでに物理的な接続を失っていて、Wifi、3G、またはアクセサリを介してデータを書き込もうとした場合に発生します。

于 2011-09-09T17:07:07.217 に答える