解決使用 libcurl 遇到的多執行緒崩潰問題

2021-08-11 19:32:19 字數 570 閱讀 1746

使用 curl 訪問 http 鏈結時,用 easy handle,阻塞方式訪問時發現會每個訪問啟動乙個執行緒去進行dns

想減少這種消耗,故此採用了 sh = 

curl_share_init(); curl_share_setopt(sh, curlshopt_share, curl_lock_data_dns);來啟用dns cache功能,工作的挺好

後面在多個執行緒裡使用同乙個 sh 控制代碼時,偶爾會報錯,研究**發現,這個dns cache不是執行緒安全的,為每個執行緒建立乙個 sh 控制代碼,解決了此問題

續:仍然存在libcurl呼叫到openssl後產生的崩潰,經調查,openssl 1.0.2 不是執行緒安全的,若要啟動執行緒安全機制,需要自定義實現 openssl 用到的全域性鎖(大概是41個),並提供乙個鎖定/釋放的 callback 函式,具體可以參考openssl_1_0_2l\crypto\threads\mttest.c 裡的 thread_setup/thread_cleanup/win32_locking_callback 3個函式的實現。

或者改用 openssl 1.1.0

libcurl 的宣告如下:

解決libcurl記憶體洩露的問題

情景是乙個程式一直執行post,通過http協議上傳資料。先curl easy init 之後再curl easy perform curl 最後 curl easy cleanup curl 但是這種方法是存在記憶體洩露的。參見 示例 include include curl curl.h int...

VS整合libcurl時遇到的問題總結

libcurl作為乙個優秀的網路庫,經常被整合到工程中。記錄一下在vs中整合libcurl出現了問題,之所以需要單獨記錄,是因為問題比較多,b汗!注 這些問題的方案大都來自其他博主,在此彙總記錄。首先的問題是libcurl的配置,當然,這其實也不能算是個問題 工程配置中新增標頭檔案和lib檔案的引用...

windows下libcurl的使用

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