Синхронные 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: Это просто недопустимо, после того, как куча запросов у какого-то сетевого повелителя была достаточно и блокирует новые запросы.

Я должен признать, что у меня ограниченные знания в области сетей, чтобы точно определить причину здесь или найти решение по этому вопросу. Каков наилучший способ решения такой задачи? Любая помощь приветствуется.

0 ответов

Другие вопросы по тегам