問題タブ [sigpipe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - SIGPIPEを防ぐ(または適切に処理する)方法
TCPまたはローカルUNIXソケットで接続を受け入れ、単純なコマンドを読み取り、(コマンドに応じて)応答を送信する小さなサーバープログラムがあります。
問題は、クライアントが答えに興味がなく、場合によっては早期に終了する可能性があることです。そのため、そのソケットに書き込むとSIGPIPE
、サーバーがクラッシュします。
ここでのクラッシュを防ぐためのベストプラクティスは何ですか?行の反対側がまだ読んでいるかどうかを確認する方法はありますか?(select()
ソケットは書き込み可能であると常に表示されるため、ここでは機能しないようです)。SIGPIPE
または、ハンドラーでをキャッチして無視する必要がありますか?
iphone - iPhoneアプリでsigpipeをキャッチするには?
iphone/objective-cでsigpipeをキャッチするにはどうすればよいですか?
ありがとう
c - 単一の popen された FILE の SIGPIPE を無視します*
私が見ているコードはここにあります:
Sparkle はプラグインのようなものです。マルチスレッドプログラムでインスタンス化できます。したがって、他のスレッドが何を行っているか/期待しているかを誰が知っているかとして、signal(SIGPIPE, SIG_IGN) (つまり、すべてのSIGPIPE を無視する) を呼び出したくありません。
popen を介して開かれたこの 1 つの FILE ポインターの SIGPIPE シグナルを無効にするにはどうすればよいですか?
iphone - アプリがバックグラウンドで実行され、画面がロックされている場合の iOS4 の SIGPIPE エラー
アプリで 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 接続を有効にできないことがわかっている限り)。私の壊れた英語で申し訳ありません^.^、どうもありがとうございました。
c - TCP設定のいずれかがSIGPIPEに影響を与えますか?
2つのシステムで同じテストコード(サーバー-クライアント)をテストしました。1つはSIGPIPEを取得していますが、もう1つはSIGPIPEを取得していません。
テストシナリオは次のようなものです。
クライアント
- サーバーに接続する
- サーバーからデータを受信する
- データを送る
- ソケットを閉じます
サーバ
- サーバーからの接続を受け入れる
- クライアントにデータを送信する
- データを受信する
- データを送る
- ソケットを閉じます
1つのシステム(同じシステムで実行されているクライアントとサーバー)では、SIGPIPEはクライアント側またはサーバー側でランダムに発生しています。
ただし、別のシステムでは、この問題は同じテストコードでは発生していません。
壊れたパイプはTCP設定と関係があるのだろうか。
tcp - TCPクライアントサーバーSIGPIPE
TCPソケット(インターネットドメイン)に基づいたクライアントサーバープログラムを設計およびテストしています。現在、ローカルマシンでテストしていますが、SIGPIPEについて次のことを理解できません。
*。SIGPIPEはかなりランダムに表示されます。それは決定論的である可能性がありますか?
最初のテストでは、クライアントからの単一のsmall(25文字)送信操作と、それに対応するサーバーでの受信が行われました。同じマシン上で同じコードが正常に実行されるかどうか(SIGPIPE)は完全に私の制御不能です。故障率は約45%(かなり高い)です。それで、これを最小限に抑えるために、何らかの方法でマシンを調整できますか?
**。2回目のテストでは、クライアントからサーバーに40000個の小さい(25文字)メッセージ(合計データ1MB)を送信し、サーバーが実際に受信したデータの合計サイズで応答しました。クライアントはタイトループでデータを送信し、サーバーで単一の受信呼び出しがあります。これは、送信された合計データの最大1200バイトに対してのみ機能します。また、これらの非決定論的なSIGPIPEがあり、現在は約70%です(本当に悪い)。
誰かが私のデザインの改善を提案できますか(おそらくそれはサーバーにあります)。要件は、サーバーへの単一のソケット接続が確立された後、クライアントが中程度から非常に大量のデータ(メッセージごとに約25文字)を送信できることです。1つの受信に対して複数の送信を行うと、常に損失が大きくなり、非常に非効率になると感じています。メッセージを組み合わせて、1つのsend()操作のみで送信しますか。それが唯一の道ですか?
mpi - ノード 2/32 で致命的なシグナル SIGBUS(7) をキャッチしました
32 ノード クラスタで NAS-UPC ベンチマークを実行しようとしています。
問題のサイズが小さい場合は問題なく動作します。より大きな問題サイズ (クラス D) に卒業すると、このエラーが発生します (MG ベンチマークの場合)
なぜこれが起こっているのか、誰でも説明できますか?また、このエラーを以前に見て修正したことがある人はいますか?
編集: メモリ関連の問題であることがわかりました。しかし、コンパイル時にアプリケーションに適切な量のメモリを割り当てることができません
c - データグラム ソケットへの書き込みで SIGPIPE が発生することはありますか?
が原因で呼び出し元を強制終了しないようにする必要があるコードを使用していますSIGPIPE
が、実行している唯一のソケット書き込みはデータグラム ソケット (UDP と Unix ドメイン データグラム ソケットの両方) への書き込みです。心配する必要はありSIGPIPE
ますか?私はconnect
ソケットで使用していますが、(Linux での) 予備テストECONNREFUSED
では、Unix ドメイン ソケットでリッスンしている人がいない場合、送信を開始するだけであることが示されました。UDP で何が起こるかわかりません。
すべてをハックでラップして を取り除くことができますSIGPIPE
が、それが問題でない場合は、オーバーヘッドを節約し、コードの複雑さを抑えたいと思います。
iphone - バックグラウンド タスクの切り替え時に SIGPIPE がクラッシュする
アプリをバックグラウンドに送信し、新しいアプリをロードし、デバイスをスリープ モードに切り替え、デバイスを起動し、新しいアプリを閉じて、バックグラウンド タスクからアプリを開くと、奇妙なクラッシュが発生します。黒い画面が表示され、ホーム ボタンでこの黒い画面を終了できず、デバッガーに次のメッセージが表示されます。
プログラム受信シグナル: 「SIGPIPE」。データ フォーマッターを利用できません (dlopen の呼び出しエラー: "/Developer/usr/lib/libXcodeDebuggerSupport.dylib": "dlopen(/Developer/usr/lib/libXcodeDebuggerSupport.dylib, 10): 適切なイメージが見つかりませんでした。見つかりました: /Developer/ usr/lib/libXcodeDebuggerSupport.dylib: アドレス空間/Developer/usr/lib/libXcodeDebuggerSupport.dylib: stat() が errno=868226285 で失敗しました
これを修正するにはどうすればよいですか?
objective-c - 目的の c で Web サーバーを作成する - 大きなファイルをアップロードするときに SIGPIPE 呼び出しを取得する
音楽共有アプリ用の Web サーバーを作成しています...大きなファイル (つまり mp3) がある場合、これは機能しません。SIGPIPE エラー コードでクラッシュします。送信しているヘッダーには「Connection: close」がありますが、これはダウンロードが終了して接続が閉じるまで待機すると想定していました。これはおそらくスレッドに分岐する必要があることはわかっていますが、テストのために同期的に動作させたいと考えています。