UDPファイル転送アプリケーションの複数のタイマーを管理する必要があります。サーバがクライアントにパケットを再送信するタイムアウトの後に が送信されましたが、タイムアウトが発生する可能性のあるパケットが複数あります。UDPプロトコル用に複数の再送信タイマーを処理するにはどうすればよいですか?
したがって、各パケットのタイマーを管理する必要があります。これどうやってするの?
アラームは使用できません。これは、以前のタイマーをキャンセルしたためで、秒単位でしか動作しないためです。
UDPファイル転送アプリケーションの複数のタイマーを管理する必要があります。サーバがクライアントにパケットを再送信するタイムアウトの後に が送信されましたが、タイムアウトが発生する可能性のあるパケットが複数あります。UDPプロトコル用に複数の再送信タイマーを処理するにはどうすればよいですか?
したがって、各パケットのタイマーを管理する必要があります。これどうやってするの?
アラームは使用できません。これは、以前のタイマーをキャンセルしたためで、秒単位でしか動作しないためです。
追跡したい各パケットのタイムアウトを含む構造体の配列を保持する必要があります。
各配列要素には、各タイムアウトの開始時刻と終了予定時刻が含まれている必要があります。タイマーを設定するときは、アレイ内のすべてのエントリをチェックして、どれが最初にタイムアウトするかを確認します。現在の時刻からその時刻を引いて、select
のタイムアウト値を取得します。
ソケットの読み取りがタイムアウトすると、リストをもう一度調べ、タイムアウト時間が現在の時刻よりも前の各パケットについて、そのパケットのタイムアウトを処理します。
これを実装する方法の例については、私が書いたマルチキャストファイル転送アプリケーションのソース(UFTP)を見てください。具体的には、client_loop.cのgetrecenttimeout
関数を見てください。
システムコール 'select(2)'を使うと、タイムアウトを指定することができます(usecの解像度で) –