Синхронные HTTPS-запросы с curlpp
Когда я пытаюсь предварительно сформировать много синхронных запросов https с помощью curlpp, я получаю следующую ошибку:
Не удалось подключиться к https://www.google.com/ порту 443. Нет маршрута к хосту
Приведенный ниже код, конечно, является только урезанным, очищенным образцом реального кода. URL отличается, но результат тот же.
void ThreadFunction()
{
try
{
curlpp::Cleanup myCleanup;
std::ostringstream os;
os << curlpp::options::Url("https://www.google.com/");
}
catch( curlpp::RuntimeError &e )
{
std::cout << e.what() << std::endl;
}
catch( curlpp::LogicError &e )
{
std::cout << e.what() << std::endl;
}
}
int main(void)
{
thread threads[10];
int loops = 0;
while(loops < 3000)
{
for(int i = 0; i < 10; i++)
{
threads[i] = thread(ThreadFunction);
}
for(int i = 0; i < 10; i++)
{
threads[i].join();
}
loops++;
}
return 0;
}
Ошибки возникают не сразу с самого начала, а вокруг цикла ~1000. После этого каждый запрос генерирует эту ошибку. Я попытался использовать разные порты (например, 80) для каждого потока, но curlpp, кажется, только выполняет запрос https с использованием порта 443. При запуске только одного потока все выглядит нормально (за исключением того, что это занимает слишком много времени, таким образом, несколько потоков).
Итак, моя теория A: На самом деле возможно выполнить такой синхронный запрос, но мне не хватает некоторого закрытия / очистки порта после запроса. (Я имею в виду, это работает для первых ~1000 * 10 запросов)
Теория Б. Невозможно предварительно сформировать запросы через один и тот же порт в одно и то же время, но потоки просто используют один и тот же порт в немного другое время (пока его нет, ~1000).
Или C: Это просто недопустимо, после того, как куча запросов у какого-то сетевого повелителя была достаточно и блокирует новые запросы.
Я должен признать, что у меня ограниченные знания в области сетей, чтобы точно определить причину здесь или найти решение по этому вопросу. Каков наилучший способ решения такой задачи? Любая помощь приветствуется.