我正在使用libcurl
和C ++。我已经为下载网页制作了一个线程安全的类。每次调用静态download
方法都会创建“简单”句柄,执行作业并释放句柄。当我从单线程中使用它时 - 一切都很好。但是,当我产生多个线程并行下载多个页面时,我有时(不是每次下载,而是经常)得到错误说“超时”。我配置了相当高的超时(5秒连接超时和25秒全局超时)。
关于可能是什么原因以及如何解决它的任何想法?
P上。 S.它发生在Windows和Linux上。
以下是相关方法的代码:
void CHttpDownloaderLibcurl::downloaderThread( const CUrl& url, CThreadSafeQueue<CHtmlPage>& q)
{
CHtmlPage page (url);
CURL* handle = curl_easy_init();
if (!handle)
{
assert(handle);
return;
}
int curlErr = setCurlOptions(handle, url, (void*)onCurlDownloadCallback, (void*)&page.byteArray());
if (CURLE_OK != curlErr)
{
assert("Error setting options" == (char*)curlErr);
return;
}
curlErr = curl_easy_perform(handle);
page._info = getInfo(handle);
curl_easy_cleanup(handle);
if (CURLE_OK != curlErr)
{
if (curlErr == CURLE_OPERATION_TIMEDOUT)
{
CLogger() << "Curl timeout!";
}
else
CLogger() << url.urlString() << ": Error performing download = " << curlErr;
return;
}
q.push(page);
}