背景: CreateIoCompletionPort、WSASend/Recv、および GetQueuedCompletionStatus を使用して、サーバーでオーバーラップ ソケット io を実行しています。フロー制御については、クライアントに送信するときに、保留中のすべての OVERLAP が IOCP からポップされたときにのみ、複数の WSASend() の呼び出しを許可します。
問題: 最近、OVERLAP が IOCP に返されない場合があります。GetQueuedCompletionStatus を呼び出すスレッドはそれらを取得せず、ローカルの保留キューに残ります。クライアントがソケットからデータを受信し、ソケットが接続されていることを確認しました。WSASend() 呼び出しが行われたときに、エラーは返されませんでした。OVERLAP は、次のような外部刺激がなければ、単に「決して」元に戻ることはありません。
- クライアントまたはサーバーからソケットを切断すると、すぐに GetQueuedCompletionStatus スレッドが OVERLAP を取得できるようになります。
- すべての OVERLAP が突然キューから取り出される前に、WSASend() を追加で呼び出す必要があります。
質問: この種の行動を見た人はいますか? これを引き起こしている原因についてのアイデアはありますか?
ありがとう、ジェフリー