私は 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
要点は、転送前と転送開始の間に何が起こっているのかということです。