Параллельные запросы через прокси требуют отдельного владения дескрипторами libcurl
Держите дескрипторы libcurl во владении одного потока одновременно, когда запросы используют разные прокси.
Параметр прокси принадлежит дескриптору libcurl easy. Изменение этого параметра из одного потока, пока другой поток выполняет передачу на том же дескрипторе, нарушает правила владения дескриптором.
libcurl потокобезопасен при соблюдении задокументированных правил. Он не синхронизирует внутри произвольный одновременный доступ к одному дескриптору. Дайте параллельным обработчикам собственные дескрипторы или передавайте владение только после того, как предыдущий пользователь закончил.
У интерфейса share отдельные требования к блокировкам и ограничения. Это не разрешение каждому обработчику менять любую настройку общего дескриптора easy.
Старые примеры прокси-потоков часто содержат блокирующие обратные вызовы для старых версий библиотек TLS. Проверьте актуальную документацию по потокобезопасности для фактического TLS-бэкенда и сборки. Копирование исторических обратных вызовов OpenSSL в текущее приложение не заменяет правильное владение дескриптором.
Инициализируйте глобальное состояние библиотеки согласно задокументированным требованиям запуска, прежде чем использовать её одновременно. Для публичных запросов, разрешённых через публичных посредников, бесплатный список прокси предлагает кандидатов для параметра прокси каждого обработчика; согласуйте протокол со сборкой libcurl. Для каждой неудачной операции сохраняйте настроенный прокси дескриптора и собственный результат ошибки. Глобальная переменная “текущий прокси” — плохой идентификатор, когда выполняется несколько передач.