CURLOPT_CONNECTTIMEOUT_MS = 200、CURLOPT_TIMEOUT_MS = 70msが設定されています。しかし、私はCURLINFO_TOTAL_TIMEが約220ミリ秒になるのを見ています。Curlが正しくタイムアウトしない
libcurl docによると、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
ので
カールタイミング情報をこれをチェックしてくださいポイントは、事前転送と開始転送の間に何が起こっているかです。
おそらくDNSの解決 – Brad
どのcURLのバージョンを使用していますか? –
あなたの誰かが説明することができます、何が原因である可能性があります。 HTTP要求にかかる時間を分けて説明できるとすばらしいでしょう。 – naveen