2013-10-05 6 views
8

मेरे पास CURLOPT_CONNECTTIMEOUT_MS = 200 और CURLOPT_TIMEOUT_MS = 70 एमएस सेट है। लेकिन मैं लगभग 220 एमएस होने के लिए CURLINFO_TOTAL_TIME देख रहा हूं।कर्ल ठीक से समय नहीं निकाल रहा

libcurl दस्तावेज़ के अनुसार, CURLOPT_TIMEOUT_MS में कनेक्ट टाइमआउट भी शामिल है। तो मूल रूप से मेरे कर्ल कॉल कुल समय 70 एमएस से अधिक नहीं लेना चाहिए। लेकिन यह नियंत्रण वापस वापस क्यों ले रहा है?

क्या कोई इस व्यवहार को समझा सकता है।

मैं कर्ल 7.19_02 सी ++ लाइब्रेरी का उपयोग कर रहा हूं।

यहाँ मेरी कोड

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

में कौन से कर्ल संस्करण का उपयोग कर रहे हैं, "उप-सेकंड टाइमआउट सुधार" में हो सकता है? –

+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 

मैं changeset बग फिक्सिंग नहीं पा सके। लेकिन cURL Changes

संबंधित मुद्दे