select() を使用します。これは、何かが読み取れるようになるまで、または以下のように timeval で指定された時間だけブロックされます。
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
select() は読み取りも書き込みもせず、一連の記述子 (readfds、writefds、および/または exceptfds) を対象としており、次のいずれかが発生するまで待機/ブロックします。
- 読み取り可能な記述子がある
- 書き込み可能な記述子がある
- 記述子の 1 つに例外があり、閉じられたようです
- タイムアウトが指定されている場合、構成された時間が経過したとき
単純に 5 秒間「待機」(スリープ) してから読み取る必要がある場合は、( usleep()
Linux では) 5 秒間スリープしてから、ソケット オプションを設定するか、select() を呼び出して非ブロッキング読み取りを実行できます。最小タイムアウトを確認し、読み取るものがあるかどうかを確認します。
ここに関連する質問があります。C++ select() 関数は Unix OS でどのように機能しますか?