rpc に名前付きパイプを使用しています。サーバーがパイプへの書き込み例外を取得した場合 (たとえば、クライアント側が突然閉じられた場合)、例外をキャッチし、名前付きパイプの切断を呼び出してから、connectNamedPipe を呼び出しようとすると、232 が返されます。パイプが閉じられています。私の質問は、この問題を解決する方法です。そのため、例外が発生した後、パイプで再度リッスンを開始します
9478 次
2 に答える
4
申し訳ありませんが、手遅れかどうかはわかりません。このスレッドはかなり古いようです。
しかし、ここでこの問題をグーグルで検索している私のような人の利益のために.
スレッド スターターが直面した問題は単純です。切断された後、クライアントは同じパイプに再接続できません!
したがって、クライアント側のパイプが突然閉じられた場合、サーバー側のパイプも停止します。再接続する場合、サーバーは別の CreateNamedPipe 関数を提供して新しい接続を取得し、クライアントに接続を試みるように要求する必要があります。
重要なのは、パイプの理解です。
于 2014-08-19T20:35:59.617 に答える
1
私は同じ問題に遭遇しましたが、レオンとは少し異なります。
私の場合、ReadFile() は 232 "パイプが閉じられています" を返します。メッセージはミスリーディングです。パイプが閉じられていません。ReadFile() は、データを読み取らずに返されます。
私が作成したパイプはノンブロッキングなので、ReadFile() がデータなしですぐに返されるのは完全に理にかなっています。
winerror.h でエラー コードを確認すると、それは「ERROR_NO_DATA」であり、「パイプが閉じられている」よりもはるかに優れています。
于 2017-03-28T13:01:28.853 に答える