libcurl 執行緒安全的要求之一是底層 SSL 庫應該是執行緒安全的。
根據 GnuTLS 的檔案,它在設計上是執行緒安全的。
GnuTLS 庫在設計上是執行緒安全的,這意味著只要單個執行緒訪問單個物件,庫中的物件(例如 TLS 會話)就可以安全地跨執行緒劃分。這足以支持每個執行緒處理多個會話的服務器。對物件(例如憑證保存結構)的只讀訪問也是執行緒安全的。
但是,需要注意的用例很少。
一個 gnutls_session_t 物件也可以被兩個執行緒共享,一個發送,另一個接收。但是,必須注意以下用例:
-
TLS 1.2 或更早版本中的重新握手程序必須僅在單個執行緒中處理,其他線??程不得執行任何操作。
-
在這種操作模式下,標志 GNUTLS_AUTO_REAUTH 不能安全使用。
-
任何其他可能發送或接收資料的操作,如密鑰更新(cf,gnutls_session_key_update),在執行緒接收或寫入時不得執行。
-
會話的終止應該由單個執行緒來處理,或者由發送者執行緒使用帶有 GNUTLS_SHUT_WR 的 gnutls_bye 和接收執行緒等待回傳值為零(或在某些不回應的服務器上超時)。
-
在并行操作期間不應依賴函式 gnutls_transport_set_errno 和 gnutls_record_get_direction。
libcurl 是否處理上述用例?
uj5u.com熱心網友回復:
是的,它確實。
libcurl 不使用來自多個執行緒的 gnutls_session_t 物件,因此那些提到的預防措施不適用(它也不做任何其他據說不是執行緒安全的事情)。只要您遵循libcurl 的執行緒安全指南,執行緒化 libcurl 與 GnuTLS(或其他 TLS 后端)一起使用應該沒問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416729.html
標籤:
上一篇:倒數計時器-變數過期時隱藏
下一篇:算術溢位取決于按列分組
