2013-10-13 43 views
1

我有cURL的问题。我已经使用curl_multi启用流水线(服务器支持它)。但是我有超过10000个单一网址,我需要下载。我没有那么多免费插座。如何处理这个?cURL - 多 - 太多开放式套接字

我看了一下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); 

回答

1

首先,你真的不解释太多,这使得回答真的很难。多接口不会强制您一次执行所有传输。

CURLMOPT_MAX_TOTAL_CONNECTIONS可能是你想要的,添加到libcurl 7.30.0中。