libcurl的使用 如何復用連線

2021-07-05 06:54:03 字數 1280 閱讀 6534

正常使用curl的流程是:

curl_global_init

curl_easy_init

。。。呼叫資料

curl_easy_cleanup

curl_global_cleanup

這樣去寫邏輯,每次都會建立tcp連線,浪費了網路時間

如果是多執行緒變成,應該這樣,去重用http連線:

1、main函式裡面【主線程】:

curl_global_init【這個函式只能在主線程呼叫1次】

pthread_key_create

。。。建立執行緒

等待執行緒

curl_global_cleanup

2、執行緒裡面:

curl* p1= curl_easy_init();

pthread_setspecific(g_curl_key, (void *)p1);

當然,如果要在主線程使用url函式,也需要這2個函式。

3、url訪問函式:【多執行緒呼叫】

curl = (curl *)pthread_getspecific(g_curl_key);

curl_easy_setopt(curl, curlopt_url, url);

/* enable tcp keep-alive for this transfer */

curl_easy_setopt(curl, curlopt_tcp_keepalive, 1l);

/* keep-alive idle time to 120 seconds */

curl_easy_setopt(curl, curlopt_tcp_keepidle, 120l);

/* interval time between keep-alive probes: 60 seconds */

curl_easy_setopt(curl, curlopt_tcp_keepintvl, 60l);

/* now specify the post data */

curl_easy_setopt(curl, curlopt_postfields, params);

curl_easy_setopt(curl, curlopt_writedata, (void *) &tmp);

curl_easy_setopt(curl, curlopt_writefunction, write_string);

/* perform the request, res will get the return code */

curl_easy_perform(curl);

windows下libcurl的使用

使用的是curl 7.26.0版本,這個版本下的根目錄下有.dsw檔案,個人只是覺得使用編譯方便點,其他版本未深究 解壓開啟根目錄下的curl dsw 選擇libcurl,單編譯這個release 使用的時候 指定vc路徑 include到目錄裡面的indclude lib庫指到剛編譯的lib re...

libcurl庫的簡單使用

include include include include include include pragma comment lib,ws2 32.lib pragma comment lib,wldap32.lib ifdef debug pragma comment lib,libcurld.l...

libcurl 使用的乙個錯誤

作者 yu tao 關鍵字 libcurl,liboauth,kpfs,longjmp chk,curlopt nosignal 近來遇到乙個 libcurl crash 的問題,這裡記錄一下。出錯的 log longjmp causes uninitialized stack frame kpfs...