代理选项属于某个 libcurl easy 句柄。在一个线程执行传输的同时从另一个线程修改该选项,会违反该句柄的所有权规则。

在遵循其文档规则的前提下,libcurl 是线程安全的。它并不会在内部同步对同一个句柄的任意并发访问。请让并发工作线程各自持有句柄,或仅在前一个使用者完成后才转移所有权。

share 接口有独立的加锁要求和限制。它并不等于允许每个工作线程修改共享 easy 句柄的每一项设置。

旧的代理线程示例常带有针对旧版 TLS 库的加锁回调。请针对实际的 TLS 后端和构建,查阅当前的线程安全文档。把历史上的 OpenSSL 回调复制到当前应用中,并不能替代正确的句柄所有权。

在并发使用之前,按文档中的启动要求初始化库的全局状态。对于经由公共中介获准的公共请求,免费代理列表可为每个工作线程的代理选项提供候选;请让协议与 libcurl 构建相匹配。对每次失败的操作,保留该句柄已配置的代理及其自身的错误结果。当多个传输在进行时,全局的“当前代理”变量是个糟糕的标识。

相关文章