問題タブ [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.

0 投票する
2 に答える
1838 参照

iphone - アプリケーションがバックグラウンドで中断された状態で電話をロックした後、AsyncUDPSocketが壊れたパイプ

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

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

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

0 投票する
1 に答える
4384 参照

python - Python-壊れたパイプをキャッチする方法

SIGPIPEについて学び、Pythonでこれらを処理する方法について読みました。

他の情報源の中で、私は読んだ:Pythonで壊れたパイプ(SIGPIPE)を処理する方法は?

パイプ読み取りスクリプトが終了すると、すべての回答は、書き込みスクリプトが書き込み呼び出しをtry句でラップすることを示唆しています。

しかし、私はこれを機能させることができません。これは私のコードです:

そしてシェルで:

明らかに、何も捕らえられませんでした。さらに、「元の例外は:」と出力されたとき、それは本当に間違っているように見えます。

何が間違っている/私は何を誤解しましたか?

トーマス

0 投票する
1 に答える
691 参照

c++ - popen() されたプロセスが終了時にデストラクタを実行するようにする方法は?

コマンドを実行するためのパイプがある場合、パイプされたコマンドはクリーンアップを行う必要がありますが、パイプを開始したプロセスにエラーがある場合、パイプされたコマンドはクリーンアップされません。この場合、パイプされたコマンドは SIGPIPE を取得していますか? cleanupPipe デストラクタが常に実行されるようにするにはどうすればよいですか? errorOccurred 例外がスローされると、cleanupPipe デストラクタが実行されていないことがわかります。例外をスローするように SIGPIPE ハンドラーを設定しているので、結果が SIGPIPE の場合、SIGPIPE の結果として例外がスローされ、スタックが巻き戻されたときに、デストラクタが実行されることを期待します。

0 投票する
1 に答える
506 参照

ipad - FTP サーバーへの接続を間違えると、SIGPIPE 例外でアプリがクラッシュする

FTPサーバーに接続できるアプリを作ってみました。この接続を行うために Chilkat ライブラリを使用しました。問題は、アプリをテストして間違った接続をしたいということです。だから私は自分のFTPサーバーに接続しますが、SSL接続を使用しています(暗黙のSSL接続のチルカットサンプルコードのチルカットの例に基づいています)

参考までに、FTP サーバーに SSL を設定していません。デバイスでコードを実行した後、アプリがクラッシュし、デバッガーに SIGPIPE が表示されました。間違ったソケット接続を行ったためにSIGPIPEが発生することはわかっていますが、それを処理する方法がわかりません。このリンクでキャッチされない例外に関する記事を読みましたが、これらを実装する方法がわかりません。

これらの SIGPIPE 例外を処理する方法を教えてもらえますか?

0 投票する
1 に答える
13455 参照

c - シグナルとシグパイプの使用

フォーク (プロセス)、シグナル、および選択を使用してデータを処理する (円周率を計算する) プログラムを作成する課題に取り組んでいます。

私は現在シグナルに取り組んでおり、私がやりたいと思うのは SIGPIPE を使用することです。プログラムがそれをキャッチすると、パイプに再度書き込もうとします(プロセスがリーダーのないパイプに書き込もうとした場合、SIGPIPE が送信されます)。

main() で fork() を使用して、ワーカー関数に送信することで各プロセスに同じ作業を割り当てます。

この関数にシグナルを実装して SIGPIPE をキャッチし、再びパイプに書き込むにはどうすればよいですか?

ありがとうございました!

0 投票する
1 に答える
481 参照

c - 実行中のプログラムで SIGPIPE

私には 2 つのデーモンがあり、A は B に話しかけています。B はポートでリッスンしており、A はそのポートへの tcp 接続を開きます。A は B に対してソケットを開くことができますが、実際にそのソケットを書き込もうとすると SIGPIPE が発生するため、B が開いているソケットを閉じている可能性がある場所を見つけようとしています。

ただし、gdb で両方のデーモンにアタッチすると、データを処理するコードが呼び出される前に SIGPIPE が発生します。最初の書き込みは決して成功せず、リスナーはデータの受信によってトリガーされるため、この種の方法は理にかなっています。私の質問は、データが送信される前にデーモン B がソケットを閉じる原因は何ですか? ソケットは開いてから 1 マイクロ秒もかからずに閉じられるので、タイムアウトなどではないと考えています。私はこれを数日間噛んでいて、ほとんどアイデアがありません.

リクエストに応じて、通信を受け入れて処理するコードを次に示します。

注: このコードは私が書いたものではありません。

0 投票する
2 に答える
386 参照

linux - Unixパイプのダウンストリームプロセスがクラッシュしたかどうかを確認する方法

Linuxプロセス(これをメインプロセスと呼びましょう)があり、その標準出力はシェルのパイプ演算子(|)によって別のプロセス(ダウンストリームプロセスと呼ばれます)にパイプされます。メインプロセスは、ダウンストリームプロセスがクラッシュした場合にSIGPIPEシグナルを受信するように設定されています。残念ながら、SIGPIPEは、メインプロセスがstdoutに書き込むまで発生しません。ダウンストリームプロセスが終了したことをより早く伝える方法はありますか?

1つのアプローチは、ダウンストリームプロセスに継続的に書き込むことですが、それは無駄に思えます。もう1つのアプローチは、関連するすべてのプロセスを監視する個別のウォッチドッグプロセスを用意することですが、これは複雑です。または、select()を使用してシグナルをトリガーする方法があるかもしれません。メインプロセスがこれをすべて自分で実行できることを望んでいます。

0 投票する
3 に答える
518 参照

c++ - 最初の送信直後に SIGPIPE が生成されない

TCPソケットが破損したパイプエラーをすぐに報告できるかどうかを知りたい. 現在、サーバーがダウンしたときにクライアント側でsigpipe信号をキャッチしています...しかし、sigpipe信号は、クライアントからサーバーに2番目のメッセージが送信された後にのみ生成されることがわかりました。これの考えられる理由は何ですか?? もう一方のソケットの端がダウンした場合、最初の送信は sigpipe を返さなければなりません..その信号はすぐに生成されません..?? この独特の振る舞いに何か説明はありますか?? そして、これを回避する方法はありますか??

0 投票する
1 に答える
556 参照

c - TCPベースのConcurrentEchoCleint-SeverでのSIGPIPEエラー

私はネットワークプログラミングに不慣れで、SocketAPIを利用する小さなプログラムを書くことでこれを学んでいます。現在、私は単純なエコーサーバーを作成しています。これは、フォークを使用してそのコピーを作成します。接続要求を受け取るとすぐに、以前の反復 サーバー(ここ)よりも改善されます。ただし、サーバーを起動してクライアントを起動し、コンソールにメッセージを入力すると、予期せず終了します。Gdbでプログラムを実行すると、それSIGPIPEが配信されたことがわかります。しかし、ソケットがまだ有効である限り、SIGPIPEは発生していないはずです。関係するあらゆる種類の助けをいただければ幸いです。これがクライアントコードです

これがサーバーコードです

0 投票する
1 に答える
549 参照

r - Rmpi スレーブがユーザー定義関数を呼び出すときのエラー

私はマスターがスレーブと平等に仕事の負担を分担することを望む Rmpi​​ コードを書きました。そのため、関数work_by_masterは送受信を行う前に両方の呼び出しを行い、結果を交換しmpi.bcast.cmdますwork_by_slaveswork_to_be_done_per_process

私は常にエラーが発生していました:

私はエラーが何であるかを理解するのに苦労し、最終的に多くの時間を費やした後、スレーブがネストされた方法でユーザー定義関数を呼び出すことができないという事実からエラーが発生した可能性があることに間接的に気付きました. に組み込み、master のみを呼び出すようにしたらwork_to_be_done_per_process、エラーは解消されました。work_by_slaveswork_to_be_done_per_process

work_to_be_done_per_processまた、関数をwork_to_be_done_per_process_by_slavesandに複製しwork_to_be_done_per_process_by_master、スレーブとマスターがそれぞれそれらを呼び出せるようにしました。これでも問題は解決しませんでした。したがって、私の上記の結論だけが理由のようです。

本当ですか?スレーブが内部からユーザー定義関数を呼び出すことができないというこの問題に直面した人はいますか? 正しく行う方法はありますか。