1

我想自定义接收功能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;
}

和结构定义:

struct response {
    char *buffer;
    int  buf_left;
    int  buf_offset;
};

我安装了自定义的接收功能:

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)该服务器已响应。

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

谢谢和最好的问候。

4

1 回答 1

1

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

http://curl.haxx.se/libcurl/c/getinmemory.html

于 2012-05-15T12:50:10.627 回答