2013-06-29 3 views
7

Sto utilizzando libcurl per inviare un comando API a un servizio locale (ad esempio su 127.0.0.1).ritardi di libcurl per 1 secondo prima del caricamento dei dati, l'arricciatura della riga di comando non è

Il programma è destinato a sostituire uno script di shell (che utilizza il programma curl.)

Tutto sta funzionando, tranne che c'è un 1 secondo di ritardo da qualche parte, cioè 1 secondo trascorre dal momento che chiamo curl_easy_perform() a quando viene chiamata la mia funzione di richiamata di lettura.

programma

La C sta utilizzando queste opzioni (il controllo degli errori & codice di callback omesso):

curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:12345/x"); 
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); 
curl_easy_setopt(curl, CURLOPT_INFILESIZE, (long)getLengthOfCommandObject()); 
curl_easy_setopt(curl, CURLOPT_READFUNCTION, &myReadFunction); 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &myWriteFunction); 

Ma se corro curl dalla shell in questo modo:

$ curl --data-binary '<command>' http://127.0.0.1:12345/x 

invia immediatamente la richiesta , senza subire il ritardo di 1 secondo.

Che cosa potrebbe causare il ritardo e c'è un'opzione che posso impostare per impedirlo?


Modifica Il server è basato su mongoose

+1

hai provato eseguire il vostro binario con _strace_? potrebbe mostrare qualsiasi ritardo nell'esecuzione del programma. La pagina man di strace ha molte opzioni correlate al tempo. – VoidPointer

+0

@VoidPointer, strace non ha rivelato nulla di rilevante, ma ho trovato la causa. Vedi la mia risposta. – finnw

risposta

11

Il motivo del ritardo è stato:

una soluzione sul lato client è quello di disabilitare l'intestazione Expect in questo modo:

headers = curl_slist_append(NULL, "Expect:"); 
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); 
// ... 
result = curl_easy_perform(curl); 
curl_slist_free_all(headers); 

Equivalent fix for PHP client e related PHP question

+0

Ho lo stesso problema. Questa risposta salva davvero la mia giornata !!!! – Tranz

Problemi correlati