并行代理请求需要独立的 libcurl 句柄所有权
当请求使用不同代理时,让 libcurl 句柄在任一时刻只归属一个线程。
代理选项属于某个 libcurl easy 句柄。在一个线程执行传输的同时从另一个线程修改该选项,会违反该句柄的所有权规则。
在遵循其文档规则的前提下,libcurl 是线程安全的。它并不会在内部同步对同一个句柄的任意并发访问。请让并发工作线程各自持有句柄,或仅在前一个使用者完成后才转移所有权。
share 接口有独立的加锁要求和限制。它并不等于允许每个工作线程修改共享 easy 句柄的每一项设置。
旧的代理线程示例常带有针对旧版 TLS 库的加锁回调。请针对实际的 TLS 后端和构建,查阅当前的线程安全文档。把历史上的 OpenSSL 回调复制到当前应用中,并不能替代正确的句柄所有权。
在并发使用之前,按文档中的启动要求初始化库的全局状态。对于经由公共中介获准的公共请求,免费代理列表可为每个工作线程的代理选项提供候选;请让协议与 libcurl 构建相匹配。对每次失败的操作,保留该句柄已配置的代理及其自身的错误结果。当多个传输在进行时,全局的“当前代理”变量是个糟糕的标识。