アプリで BSD ソケットを使用して iphone4 (iOS4.1) でデータを送受信します。アプリには 3 つの状況があります。
- アプリはフォアグラウンドで実行され、画面がロックされていますが、問題ありません。
- アプリはバックグラウンドで実行されており、画面がロックされていません。これも問題ありません(NSStreamを使用して、アプリをバックグラウンドで維持するためのデータを送受信していますが、正常に動作します。)
- アプリはバックグラウンドおよび画面ロックで実行され、アプリは正常に実行されますが、アプリが 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 接続を有効にできないことがわかっている限り)。私の壊れた英語で申し訳ありません^.^、どうもありがとうございました。