UDPソケットでIOCPを使用していて、UDPソケットが別のスレッドで閉じられている可能性があります。では、SOCKETに関連するPer I/O ContextとPer I/O Contextを安全にどのように解放することができますか?I/O完了ポート、ソケットコンテキストごとおよびI/Oコンテキストごとの解放方法
ソケットを閉じると、未完了のI/O要求がカーネルキューに残ります。
ソケットを閉じたときにコンテキストを解放すると、GetQueueCompletionStatusが失敗することがあります。
私の質問は文脈を自由にするときです。
保留中のパケットは何ですか?例えば読み取りと書き込みが保留中の場合は、最初にERROR_OPERATION_ABORTEDを返すかどうかわかりません。 –
有効な完了キーとGetQueuedCompletionStatus()から返された重複したパラメータは、ERROR_OPERATION_ABORTEDを指定しても取得されます。あなたは自由にしたい文脈にどちらかを使うかもしれません。 –
私が書いたものと読んだものの両方がある場合(つまり、2つのオーバーラップされた構造がI/O完了を待っている)、どちらが最初に完了するかわからず、最後に完了するでしょう両方ともERROR_OPERATION_ABORTEDを返しても)、最後に完了する*アトミックカウンタを必要とします。その後、そこからクリーンアップルーチンを呼び出してメモリを解放します。 –