diff options
author | Alex Borisov <b0ric.alex@gmail.com> | 2012-03-24 00:29:12 +0200 |
---|---|---|
committer | Alex Borisov <b0ric.alex@gmail.com> | 2012-03-24 00:29:12 +0200 |
commit | b606632400d491b864eeb36464eb9fab63136ac8 (patch) | |
tree | 9db3a581073d7bae82c6b87ce40d47c8aee4af89 /server/server/speedtest.cpp | |
parent | db10b50c84a4aaf5014e0f164b3f4f79ca222429 (diff) | |
parent | 8b0b635491dd318baab5d93575eed9cda2b3c9fd (diff) |
Merge branch 'master' of ssh://sss.chaoslab.ru/home/private_git/proxy_ui
Diffstat (limited to 'server/server/speedtest.cpp')
-rw-r--r-- | server/server/speedtest.cpp | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp index 21fe21c..8303afc 100644 --- a/server/server/speedtest.cpp +++ b/server/server/speedtest.cpp @@ -40,10 +40,10 @@ size_t speedtest::test(config::proxy_entry_base *p) curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_TRY); //maybe required for https proxy ? break; case config::SOCKS4: - type = CURLPROXY_SOCKS4; + type = CURLPROXY_SOCKS4A; break; case config::SOCKS5: - type = CURLPROXY_SOCKS5; + type = CURLPROXY_SOCKS5_HOSTNAME; break; } curl_easy_setopt(curl, CURLOPT_PROXYTYPE, type); @@ -51,12 +51,28 @@ size_t speedtest::test(config::proxy_entry_base *p) curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk); curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-speedtest/0.1"); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); + //curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1); //require latest curl (.25) - time_t start = time(0); + boost::posix_time::ptime _t = boost::posix_time::second_clock::local_time(); - CURLcode error = curl_easy_perform(curl); + CURLcode error = CURL_LAST; + for(int i = 0; error && (i < 3); i++) + { + if(i > 1) + { + if(type == CURLPROXY_SOCKS5_HOSTNAME) + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + if(type == CURLPROXY_SOCKS4A) + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A); + } + error = curl_easy_perform(curl); + } + + boost::posix_time::ptime _t2 = boost::posix_time::second_clock::local_time(); + + boost::posix_time::time_duration td = _t2 - _t; - double t = time(0) - start; + double t = td.total_milliseconds(); curl_easy_cleanup(curl); @@ -67,7 +83,7 @@ size_t speedtest::test(config::proxy_entry_base *p) if(chunk.size) { if(t) - speed = (double)chunk.size/t; + speed = (double)(chunk.size*1000)/t; else speed = chunk.size; } |