pthread
リモート ホストへのソケット接続を維持しようとするを生成するコードがいくつかあります。接続が失われた場合はconnect()
、ソケットでブロッキング呼び出しを使用して再接続を試みます。コードは別のスレッドで実行されるため、同期ソケット API を使用しているという事実はあまり気にしません。
つまり、アプリケーションが終了する時が来るまでです。整然としたシャットダウンに似たものを実行したいので、スレッド同期プリミティブを使用してスレッドを起動し、終了するように通知してから、スレッドで a を実行しpthread_join()
て、スレッドが完了するのを待ちます。connect()
シャットダウンを命じたときにスレッドが呼び出しの途中でない限り、これはうまく機能します。その場合、接続がタイムアウトするまで待たなければならず、それには長い時間がかかる可能性があります。これにより、アプリケーションのシャットダウンに時間がかかるように見えます。
私がやりたいのはconnect()
、何らかの方法で呼び出しを中断することです。呼び出しが戻った後、スレッドは終了シグナルに気づき、正常にシャットダウンします。はシステム コールなのでconnect()
、シグナルを使用して意図的に中断できるのではないかと考えました (したがって、呼び出しを return にしますEINTR
)。ただし、これが POSIX スレッド環境で堅牢な方法であるかどうかはわかりません。
シグナルを使用するか、他の方法を使用して、これを行う方法に関する推奨事項はありますか? 注意として、connect()
変更できない一部のライブラリ コードで呼び出しがダウンしているため、ノンブロッキング ソケットに変更することはできません。