2015-05-28 10 views
1

С помощью этого кода я отправляю строки на веб-сервер, используя libcurl и записывая данные в MySQL (выполняется на веб-сервере). Моя проблема в том, что для каждого вызова этой функции программа запускает новый обмен ключами с веб-сервером. Я хотел бы иметь постоянное соединение с Сервером. Я искал здесь и в сети уже и не нашел удовлетворительных решений. Multi-handler и принудительное сохранение в живых все еще открывают новое соединение.keep-alive curl C htttps POST

Ниже мой код, чтобы установить SSL-соединение:

CURL *curl; 
CURLcode res; 

res = curl_global_init(CURL_GLOBAL_DEFAULT); // Check for errors 

if(res != CURLE_OK) { 
    fprintf(stderr, "curl_global_init() failed: %s\n", 
    curl_easy_strerror(res)); 
    return 1; 
} 

// curl handler 
curl = curl_easy_init(); 

if(curl) { 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, STRING); 
    curl_easy_setopt(curl, CURLOPT_URL, "https://IP/something/something.php"); 
    curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L); 
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); //verbose output activated 
    struct curl_slist *headers=NULL; 
    headers = curl_slist_append(headers, "Content-Type: application/json"); // type JSON 
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); 

    // Perform the request, res will get the return code 
    res = curl_easy_perform(curl); 

    // Check for errors 
    if(res != CURLE_OK) 
     fprintf(stderr, "curl_easy_perform() failed: %s\n", 
       curl_easy_strerror(res)); 

    // cleanup 
    curl_slist_free_all(headers); 
    curl_easy_cleanup(curl); 
} 
curl_global_cleanup(); 
+0

Благодарим за то, что код выглядел довольно драгошта – gamejunkie959

ответ

2

отвечает Даниэль Стенберг here, что подобный/тот же вопрос.

Повторно использовать один и тот же рулон для завивки в последующих запросах! Не вызывайте curl_easy_cleanup (curl) и curl_easy_init() снова между ними.

Таким образом, решение заключается в вызове curl_easy_cleanup (curl) и curl_easy_init() только один раз.