8

私は CURLOPT_CONNECTTIMEOUT_MS = 200 と CURLOPT_TIMEOUT_MS = 70 ms を設定しています。しかし、私は CURLINFO_TOTAL_TIME が約 220 ミリ秒であることを確認しています。

libcurl doc によると、CURLOPT_TIMEOUT_MS には接続タイムアウトも含まれます。したがって、基本的に私の curl 呼び出しの合計時間は 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

要点は、転送前と転送開始の間に何が起こっているのかということです。

4

2 に答える 2

2

バージョン 7.20.0 までの libcurl のバグです。7.20.1 では、出力は次のようになります。

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

バグを修正する変更セットが見つかりませんでした。ただし、 cURL の変更で「1 秒未満のタイムアウトの改善」になる可能性があります

于 2013-12-01T20:53:08.840 に答える