2013-10-05 142 views
8

我設置了CURLOPT_CONNECTTIMEOUT_MS = 200和CURLOPT_TIMEOUT_MS = 70 ms。但是我看到CURLINFO_TOTAL_TIME約爲220毫秒。Curl沒有正確超時

根據libcurl文檔,CURLOPT_TIMEOUT_MS也包含連接超時。所以基本上我的蜷縮電話總時間不應超過70毫秒。但是爲什麼它需要更多的回報來控制?

有人可以解釋這種行爲。

我正在使用curl 7.19_02 C++庫。

這裏是我的代碼

CURL * curl; 
curl = curl_easy_init(); 
curl_easy_setopt(curl, CURLOPT_URL, url); 
curl_easy_setopt(curl,CURLOPT_CONNECTTIMEOUT_MS,200); 
curl_easy_setopt(curl,CURLOPT_TIMEOUT_MS,70); 
curl_easy_setopt(curl, CURLOPT_HEADER, 0); 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer); 
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); 
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 

double tt = 0.0; 
double ns = 0.0; 
double ct = 0.0; 
double pt = 0.0; 
double st = 0.0; 

curl_easy_perform(curl); 

int curlRC = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &tt); 
curlRC = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &ns); 
curlRC = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &ct); 
curlRC = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pt); 
curlRC = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &st); 

cout << "Curl timing info: Total: " << tt << endl << " Lookup: "<< ns << endl << " Connect: " << ct << "\n" << "pre transfer: " << pt << endl << "start transfer: " << st <<endl; 

我得到的定時信息是如下。請看看這個

捲曲時序信息:總計:0.216793

查找:0.000999

連接:0.023199

前轉移:0.023213

開始轉移:0.216667

所以問題是,在轉學前和轉學之間發生了什麼?

+0

DNS解析可能是 – Brad

+0

您使用哪種cURL版本? –

+0

你們能否解釋一下,可能的原因是什麼?如果可以通過分割HTTP請求所花費的時間來解釋,那將是非常好的。 – naveen

回答

0

所以問題是,預傳輸和開始傳輸之間發生了什麼?

這是服務器計算結果(處理您的請求)所花費的實際時間,並且已準備好發送響應的第一個字節。簡而言之,這是請求的實際服務器時間,並且您希望這是最大的一塊

2

這是libcurl直到版本7.20.0的錯誤。 隨着7.20.1就像預期的輸出:

Curl timing info: Total: 0.071098 
Lookup: 0.000116 
Connect: 0.000303 
pre transfer: 0.000327 
start transfer: 0 

我找不到變更修復bug。但可能在「亞秒超時改進」中cURL Changes