私は小さなtcpサーバーを作成しており、スレッドを介して多数の要求を処理します。私のサーバーがシャットダウンしているとき、彼は閉じられていないソケットを残します。どうすればそれらを自動的に閉じることができますか、またはサーバーの新規起動時に何らかの方法でリリースできますか?ソケットの数が多いので、手作業で管理したくありません。
何か案は?
前回ソケットを扱ったときは、それぞれがソケットを管理しているさまざまなスレッドを起動し、それらを個別に閉じることでした。したがって、各スレッドの各変数にはソケット番号が含まれています。close(s)を使用してソケットを閉じることができます。ここで、sはソケットです。プログラムをシャットダウンすると、ソケットはランタイムによって解放されますが、他のプログラムで使用できるようにソケットを閉じることをお勧めします。
ソケットはどこで作成されますか?新しいスレッド内またはスレッドが開始される前ですか?スレッド内にある場合は、pthread_cleanup_push()を使用して、スレッドの終了時にソケットを閉じる(まだ開いている場合)ハンドラーをインストールすることを検討できます。