curl_multi_fdset总是返回1

时间:2018-12-18 16:01:25

标签: c++ curl curl-multi

我要做什么:同时下载多个文件。

问题: curl_multi_fdset始终返回1。

问题2:我不太了解fd_set的工作原理。我是C语言的新手,文档令人困惑。

来源:我使用了this examplethis progress bar

我的完整.cpp Github

因此问题似乎出在初始化方法中:

static void initialize(CURLM *cm, int i, char* url[], std::string filepath)
{
CURL *eh = curl_easy_init();

FILE *fp; // added to the example
fp = fopen(filepath.c_str(), "wb"); // added to the example

curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, callback);
curl_easy_setopt(eh, CURLOPT_WRITEDATA, fp); // added to the example
curl_easy_setopt(eh, CURLOPT_NOPROGRESS, 0); // added to the example
curl_easy_setopt(eh, CURLOPT_HEADER, 0L);
curl_easy_setopt(eh, CURLOPT_URL, url[i]);
curl_easy_setopt(eh, CURLOPT_PRIVATE, url[i]);
curl_easy_setopt(eh, CURLOPT_VERBOSE, 0L);
curl_easy_setopt(eh, CURLOPT_PROGRESSFUNCTION, progress_func); // added to the example

curl_multi_add_handle(cm, eh);
}

但是,如果没有这些其他选项,它也将无法工作。因此,它必须有所不同,但我没有更改fd_set的任何内容。任何帮助表示赞赏。

初始化调用:

CURLM *cm = nullptr;
CURLMsg *msg;
long L;
unsigned int C = 0;
int M, Q, U = -1;
fd_set R, W, E;
struct timeval T;

curl_global_init(CURL_GLOBAL_ALL);
/* we can optionally limit the total amount of connections this multi handle uses */
curl_multi_setopt(cm, CURLMOPT_MAXCONNECTS, (long) MAX);

if ((argc - 2) < MAX)
{
    for (C = 0; C < argc - 2; ++C)
    {
        path = "test" + std::to_string(C) + ".html";
        initialize(cm, C, urls, path);
    }
}

返回1的函数的调用

FD_ZERO(&R);
FD_ZERO(&W);
FD_ZERO(&E);

if (curl_multi_fdset(cm, &R, &W, &E, &M))
{
    fprintf(stderr, "E: curl_multi_fdset\n");
    return EXIT_FAILURE;
}

0 个答案:

没有答案