2012-02-20 6 views
0

この質問は既存のものと重複しているように聞こえるかもしれませんが、Leaky bucketアルゴリズムとその他のものについて読んだことがあります。ソケットでダウンロード速度を制限しているときに、パケットをドロップする方法はありますか?

私のプログラムは、シングルスレッドであり、データが似ていると仮定します。

[ downloaded ] [ current buffer (downloading) ] [ un-downloaded ]

、計算速度が閾値を超えたとき、私はいくつかのパケットをドロップした場合、どのように私はそのパケットを回復するつもり?データはそのように連続しています。

どのようにパケットをドロップする必要がありますか?

答えて

0

TCPは、未確認パケットを再送するように設計されています。これはプロトコルの一部として発生し、リーキーバケットアルゴリズムの基礎となります。

このため、パケットを破棄することができる唯一の方法は、使用しているライブラリにパケットが受信された後にACKを送信しない機能がある場合です。これが当てはまる場合は、保持したいすべてのパケットに対してACKを送信し、残りのパケットは後で再送信されるので無視してください。

ほとんどのライブラリは非常に低レベルであり、TCP部分を内部的に扱うため、この機能をサポートしていないと言われています。

あなたが誰かに制限を評価したい、私たちは、特定の言語(とソケット実装を)知っていることは、接続

+0

を絞るのより良い方法を知っている可能性がある場合、私はQtのネットワークモジュール、QNetworkRequestを使用しています – daisy

0

TCPソケット接続を使用している場合、プログラムは決して「パケットを破棄しない」必要があります。あなたがしたいことは、ダウンロード速度制限を超えている場合、プログラムがより多くのデータを読み込むのを防ぐことです。

関連する問題