2017-11-12 5 views
3

私のコードでは、tcp接続の帯域幅を制限したいと考えています。 This質問にはいくつかの手がかりがありますが、正確には私が望むものではありません。私は同様のアプローチを使用して、標準lib(net/tcpパッケージ)のsrcコードをハックしようとしましたが、失敗しました。 私の主な考えは、何とかsyscallから内部バッファへのデータをゆっくりと書いて、OSにtcpパケットをドロップさせることです。ゴランのtcpダウンロード速度を制限する

+1

ローカルTCPバッファからゆっくりと読み込んだとしても、カーネルは一度に '/ proc/sys/net/ipv4/tcp_rmem'(3番目の数字は最大バッファサイズです)までフェッチすることができます。長期間接続する場合は、時間の経過と共に平均化することができます(バッファーがバーストで満たされ、ゆっくり消費され、バッファーの再充填など)。実際に帯域幅を制限するには、GoではなくOSレイヤーで行う必要があります。 https://unix.stackexchange.com/a/28203/40168を参照してください。 –

答えて

0

コメントの中で述べたように、最も簡単な方法は、驚異的なツールを使ってOSレベルで行うことです。 'wondershaper'スクリプトを見ると、 'iproute2'パッケージの '/ sbin/tc'コマンドが使用されます。 私はそれがあなたがやりたいことではないことを理解していますが、os.exec()を使ってソースコード内の 'tc'コマンドを実行することで、より低いレベルに進むことができます。 独自の「トラフィック制御」アルゴリズムを実装することは、多大な労力を要し、目標には必要ないかもしれません。

関連する問題