cURL に問題があります。私はcurl_multi
パイプラインを有効にして使用しました(サーバーはそれをサポートしています)。しかし、10000 を超える単一の URL があり、ダウンロードする必要があります。私はそれほど多くの空きソケットを持っていません。これを処理する方法は?
について読みまし curl_multi_socket_action
たが、簡単な例やコードの変更方法が見つかりません
CURLM * curlm = curl_multi_init();
curl_multi_setopt(curlm, CURLMOPT_MAXCONNECTS, 3);
curl_multi_setopt(curlm, CURLMOPT_PIPELINING, 1);
std::vector<CURL_WRITE *> ptrArray;
std::map<MyStringAnsi, MyStringAnsi>::const_iterator it;
for (it = data[0].begin(); it != data[0].end(); it++)
{
CURL_WRITE * curlData = new CURL_WRITE;
curlData->dataIndex = &(it->first);
curlData->threadID = 0;
CURL * curl = InitSingleCURL(it->first, curlData);
curl_multi_add_handle(curlm, curl);
ptrArray.push_back(curlData);
curls.push_back(curl);
}
int still_running = 0;
/* lets start the fetch */
do
{
while(curl_multi_perform(curlm, &still_running) == CURLM_CALL_MULTI_PERFORM);
#ifdef _WIN32
Sleep(10);
#else
usleep(10);
#endif
} while (still_running);