如何在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 */