私はネットワークプログラミングの専門家ではありません。基本的に、タイムアウトが異なる2種類のクライアントがあります。クライアント/サーバー通信には、接続されたソケットでUDPを使用することになっています。
問題は2つあります。
a)クライアント(またはソケット)がt1秒間応答しない場合は、死亡としてマークする必要があります。read_fd_set内のどのソケットにもタイムアウト値内に読み取るものがない場合、selectを使用するとタイムアウトになります。では、かなり長い間読み取るデータがない1つのソケットをタイムアウトするにはどうすればよいですか?
- 現在、selectが戻るたびに、私自身、どのソケットが応答しているか、どのソケットが応答していないかを追跡しています。そして、各クライアント(ソケット)の個々の経過時間にt1.tu_secを追加します。次に、手動で閉じて、(n)*(t1.tu_sec)時間応答しないソケットをFD_SETから除外します。これは十分なアプローチですか?
b)主な問題は、タイムアウトが異なる2種類のクライアント、t1とt2があることです。これをどのように処理しますか?
- 同じループ内の2種類のクライアントに対して2つのselect()を使用できますか?スレッドなしで飢餓を引き起こすでしょうか?この場合、スレッドを使用することをお勧めしますか(または必須ですか)?
私は何年もの間ウェブを歩き回っています!
どんな助けでも大歓迎です。