這是利用C++11之後的系統最高精準度clock做出來的速率限制FTP Proxy,用make編譯後就可以使用了,由於make是用c++14來進行編譯的,所以如果不能編譯的話請將g++更新到最新版本。
原本在demo時我們只有過魔王測資,也就是25Kbps上傳的那個,其他的上傳限速都是錯的,但是在ubuntu上都是對的,後來發現是OS的問題,我們用了一個函數會在不同的電腦下有不同的結果,於是我們將其進行一些修改,最後終於完成現在這個版本。
輸入格式為: <Proxy IP> <Proxy Port> <下載速率> <上傳速率>
上傳與下載速率的單位都是Kbps,且必須為int範圍整數
範例
- ./a.out 127.0.0.1 8888 25 25
我們使用setsockopt這個函數來控制輸入緩出區(SO_RCVBUF)的大小,但是在ubuntu下SO_RCVBUF最小會是2304 byte,不能再小了,一開始我們設定他是8 byte。但是助教demo時用的是mac,mac貌似不會去限制SO_RCVBUF的大小,所以就真的把SO_RCVBUF變成8 byte,所以我們上傳的速率變成最大只能是90,但是demo時的上傳速率為100跟500,所以就爛了。
不過不用擔心,這個版本已經調整設定SO_RCVBUF為1024,因為系統會自動把它乘二變成2048,與2304已經十分接近所以不會有問題。