当我设置READDATA和READFUNCTION来上传文件时,libcurl在fwrite()崩溃

时间:2016-06-20 03:14:37

标签: c++ c linux curl libcurl

我想使用libcurl将文件chunked上传到远程Http服务器。我调用下面的函数来设置READDATA和READFUNCTION来注册回调参数。但是在curl_easy_perform()期间libcurl仍然崩溃。任何人都可以帮忙吗?感谢

我所说的:

ReadCallbackStatic(void *contents, size_t size, size_t nmemb, void *userp);
curl_easy_setopt(curl_data.m_lib_curl_handle_ptr, CURLOPT_READFUNCTION, ReadCallbackStatic);
curl_easy_setopt(curl_data.m_lib_curl_handle_ptr, CURLOPT_READDATA, userdata);

堆栈追踪:

(gdb) bt
#0 0x00007ffff604741a in fwrite () from /lib64/libc.so.6
#1 0x00007fffec8713f3 in Curl_client_write () from libcurl.so
#2 0x00007fffec8851b7 in Curl_readwrite () from libcurl.so
#3 0x00007fffec885ea7 in ?? () from libcurl.so
#4 0x00007fffec886a28 in Curl_perform () from libcurl.so
#5 0x00007fffec8873c6 in curl_easy_perform () from libcurl.so

1 个答案:

答案 0 :(得分:0)

看起来我也必须设置CURLOPT_WRITEDATA和CURLOPT_WRITEFUNCTION。崩溃发生在fwrite(),libcurl默认使用它来处理http POST响应数据。设置CURLOPT_WRITEFUNCTION后,崩溃消失。为什么响应数据没有发送到stdout而是fwrite()?