2013-10-05 24 views
8

Ho CURLOPT_CONNECTTIMEOUT_MS = 200 e CURLOPT_TIMEOUT_MS = 70 ms impostato. Ma sto vedendo CURLINFO_TOTAL_TIME essere intorno a 220 ms.L'arricciatura non termina correttamente

Come per il doc libcurl, CURLOPT_TIMEOUT_MS include anche il timeout di connessione. Quindi, in pratica, il mio tempo totale di chiamata al ricciolo non dovrebbe richiedere più di 70 ms. Ma perché sta prendendo più ritorno indietro il controllo?

Qualcuno può spiegare questo comportamento.

Sto usando curl 7.19_02 libreria C++.

Ecco il mio codice

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; 

Le informazioni tempistica ho ottenuto è la seguente. Si prega di controllare questo fuori

Curl informazioni tempistica: Totale: 0,216793

Lookup: 0,000999

Connect: 0,023199

pre trasferimento: 0,023213

transfer start: 0,216667

Così il punto è, cosa sta succedendo tra il trasferimento preliminare e il trasferimento iniziale?

+0

Risoluzione DNS probabilmente – Brad

+0

Quale versione di cURL stai usando? –

+0

Qualcuno di voi può spiegare, quale potrebbe essere la ragione probabile. Sarebbe bello se potesse essere spiegato dividendo i tempi presi per un req HTTP. – naveen

risposta

0

Quindi il punto è, ciò che sta accadendo tra il trasferimento pre e avviare il trasferimento?

Questo è il tempo effettivo impiegato dal server per calcolare il risultato (elaborare la richiesta) ed è pronto per inviare il primo byte della risposta. In breve, è il tempo effettivo del server per la richiesta e ci si aspetterebbe che sia il pezzo più grande

2

È un errore in libcurl fino alla versione 7.20.0. Con 7.20.1 l'uscita è come previsto:

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

non riuscivo a trovare l'insieme di modifiche che fissa il bug. Ma potrebbe essere in "sub-second timeouts miglioramenti" in cURL Changes

Problemi correlati