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