接続要求を待機しているスレッドでブロックaccept()
呼び出しがあります。アプリケーションが終了しようとしているとき、私はaccept()
を待っているスレッドに正常に終了するように通知したいと思います。私はsend()
とrecv()
のタイムアウト値を設定できますが、私はaccept()
でそれを行うことはできません。Windowsでblocking accept()呼び出しを終了するにはどうすればよいですか?
ソケットを非ブロックにしてselect()
を使用し、select()
のタイムアウト値を渡すことができますが、ソケットをブロックするソリューションを探しています。
AFAIKは、少なくとも「古い」(事前確認済みの)ウィンドウではできません。 –
'select()'を使うために非ブロッキングに切り替える必要はありません。ブロッキングソケットでも使用できます。タイムアウトで 'select()'を呼び出し、 'select()'が接続の受け入れを待っていない限り、 'accept()'を呼び出さないでください。それ以外の場合は、ノンブロッキングに切り替えます。 WSAWaitForMultipleEvents()で 'WSAEventSelect()'を使って、ソケットイベントと終了イベントを同時に待つことができます。または、ソケットイベントにI/O完了ポートを使用し、必要に応じて終了イベントを通知します。 –
CancelSynchronousIo()は、すばやく簡単に修正することもできます。 –