Синхронные HTTPS-запросы с curlpp - PullRequest
0 голосов
/ 09 октября 2018

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

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

...