クライアント ワークステーションの 1 つで奇妙な問題が発生しました。2 つのエンドポイント間でネットワーク経由でデータを交換する単純なアプリケーションがあります。
基本的に、取引は次のように行われます。
- クライアント A が着信接続をリッスンする
- クライアント B は A に接続し、いくつかのデータを送信します
- クライアントAは、さらに処理するためにこのデータを読み取ります
ここで奇妙な点は、クライアント A がデータ全体を受信しないことです (バッファの一部である場合もあれば、空の場合もあります)。
A クライアントは WSAEventSelect 関数を使用し、FD_READ が B から送信されたデータを読み取り、FD_CLOSE が切断を検出するのを待ちます。
通常 (この特定のクライアントを除くたびに) FD_READ が通知され、データが処理され、その後 FD_CLOSE が通知され、すべて問題ありませんが、ここでは代わりに FD_READ が FD_CLOSE を受け取ります。
誰かがこれがどのように可能か教えてもらえますか? もう 1 つのことは、プログラムが約 1 年間正常に動作していたのに、突然クラッシュしたことです。