I/O-Completion Port を使用して、小さなサーバー クライアントのようなものを書いています。
サーバーとクライアントは、完了ポートを介して AcceptEx 経由で正常に接続されます。クライアントが接続した後、クライアント ソケットは完了ポートに関連付けられ、そのソケットで WSARecv へのオーバーラップ呼び出しが呼び出されます。
クライアント テスト プログラムを閉じるまでは、すべて問題なく動作します。
GetQueuedCompletionStatus()
リターンFALSE
とGetLastError
リターン
ERROR_NETNAME_DELETED
、これは私には理にかなっています (MSDN の説明を読んだ後)。
しかし、私の問題は、呼び出しが適切な戻り値を返すGetQueuedCompletionStatus
ため、ソケットの閉鎖による失敗を示すパケットを返すと思ったことです。WSARecv
これは当てはまらないので、どのクライアントのソケットがエラーを引き起こしたのかわからず、必要な方法で動作できません (構造の解放、この特定の接続のクリーンアップなど)...
これを解決する方法に関する提案、またはヒントはありますか?
ありがとう:)
編集: http://codepad.org/WeYINa sO <- 責任のあるコード... "エラー" は、while ループの最初の関数で発生します (呼び出しGetCompletionStatus()
は、GetQueuedCompletionStatus() のラッパーであり、正常に動作します)他のケース) [ここはくだらない&乱雑に見えるので、そこに投稿しました]