質問

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

  1. アプリは前景とスクリーンロックで実行されています。問題ありません。
  2. アプリはバックグラウンドで実行されており、画面はロックされていません、それも問題ありません(私はNSSTREAMを使用して、バックグラウンドでアプリを維持するためにデータを送信および受信します、それは正常に動作します。)
  3. アプリはバックグラウンドと画面ロックで実行され、アプリは正常に実行されますが、アプリがUDPまたはTCPソケットを介してsend()またはsend()を呼び出すときは常にSigpipeエラーを取得します。

私はたくさん検索しますが、何も役に立ちません。 ここ 私はSigpipeとは何かを知っており、SetSockopt(Sock、Sol_Socket、So_Nosigpipe、(void *)&on、sizeof(int))を使用して、アプリが異常に終了しないようにします。しかし、このエラーが状況3でのみ発生した理由と、この状況ではBSDソケットを介して通常データを送信する方法がまだわかりません。


私は更新して再接続しようとしていますが、それは機能しませんが、それでもSigpipeエラーが発生します。すべてのBSDソケットが状況3で内部アクセスを取得できないと思います(BSDソケットがiOSでWiFiまたはエッジ接続をアクティブにすることができないことを知っている限り)、誰でも私を助けたり、提案をしてくれますか?そして、私の英語が壊れてすみません^。^、どうもありがとうございました。

役に立ちましたか?

解決

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top