如何在libcurl中定制WRITEFUNCTION来接收大数据流(高达10K)?

如何在libcurl中定制WRITEFUNCTION来接收大数据流(高达10K)?,c,curl,libcurl,C,Curl,Libcurl,我想为libcurl定制接收函数,以接收大数据(可能高达10K) 我目前的实施情况如下: static size_t wt_callback(char *ptr, size_t size, size_t nmb, void *data) { int len = size * nmb; struct response *rsp = (struct response *)data; int byte = len < rsp->buf_left ?

我想为
libcurl
定制接收函数,以接收大数据(可能高达10K)

我目前的实施情况如下:

static size_t wt_callback(char *ptr, size_t size, size_t nmb,
        void *data) {
    int len = size * nmb;

    struct response *rsp = (struct response *)data;
    int byte = len < rsp->buf_left ? len : rsp->buf_left;
    if (rsp->buf_offset == 0) {
        memset(rsp->buffer, 0, rsp->buf_left);
    }
    memcpy(rsp->buffer + rsp->buf_offset, ptr, byte);
    rsp->buf_offset += byte;
    rsp->buf_left   -= byte;

    return byte;
}
我安装了自定义接收功能:

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, wt_callback);
                                        /* How data is received */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
                                        /* Where to store incoming data */
response
被键入为
struct response*

当前的问题是没有调用
wt_callback
函数,尽管我确信(我用
wireshark
嗅探网络)服务器有响应

我不知道我被困在哪里,也不知道接收函数的实现有什么问题。如有任何提示或建议,将不胜感激


谢谢并致以最诚挚的问候。

如果没有调用写回调函数,那么问题很难是回调函数本身。由于您没有向我们展示其余的代码,我们很难猜测。也许您可以从一个示例代码中找到灵感,该示例代码具有我们已知的类似功能:


如果没有调用写回调函数,那么问题很难是回调函数本身。由于您没有向我们展示其余的代码,我们很难猜测。也许您可以从一个示例代码中找到灵感,该示例代码具有我们已知的类似功能:


添加“curl\u easy\u setopt(curl,CURLOPT\u VERBOSE,1)”,这样您就可以看到libcurl正在做什么。从调用“curl\u easy\u init();”到“curl\u easy\u perform(curl);”可以看到您的代码。curl\u easy\u perform(curl)的返回值是多少?@jamiemcnott程序启动了,我很糟糕。:)发现问题是我没有正确初始化结构中的
buf\u offset
字段,所以出现了一个segfault。尽管如此,还是要感谢您。添加“curl_easy_setopt(curl,CURLOPT_VERBOSE,1);”这样您就可以看到libcurl正在做什么。从调用“curl_easy_init();”到“curl_easy_perform(curl);”也可以看到有哪些代码。curl\u easy\u perform(curl)的返回值是多少?@jamiemcnott程序启动了,我很糟糕。:)发现问题是我没有正确初始化结构中的
buf\u offset
字段,所以出现了一个segfault。还是谢谢你。
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, wt_callback);
                                        /* How data is received */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
                                        /* Where to store incoming data */