问题描述:
调用 curl 获取消息头的时候,发现程序卡住不动了。代码如下:
1 2 3 4 |
curl_easy_setopt(curl, CURLOPT_URL, srcUrl.c_str()); curl_easy_setopt(curl, CURLOPT_HEADER, 1); curl_easy_setopt(curl, CURLOPT_NOBODY, 1); curl_easy_perform(curl); // 这句直接卡死,没有任何返回 |
经测试发现,不做任何设置,做一次发送,同样会卡死。
1 2 |
curl_easy_setopt(curl, CURLOPT_URL, srcUrl.c_str()); curl_easy_perform(curl); // 这句直接卡死,没有任何返回 |
解决方案:
经过反复试验,在请求的时候设置写数据回调,就可以正常执行了。
1 2 3 4 |
void size_t writeFunc(void *ptr, size_t size, size_t nmemb, void *userdata) { return 0; } |
1 2 3 4 5 6 |
curl_easy_setopt(curl, CURLOPT_URL, srcUrl.c_str()); curl_easy_setopt(curl, CURLOPT_HEADER, 1); curl_easy_setopt(curl, CURLOPT_NOBODY, 1); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeFunc); curl_easy_setopt(curl, CURLOPT_WRITEDATA, nullptr); curl_easy_perform(curl); |
具体原因不详,暂时没有精力去读它的代码。我猜卡死的问题与代码本身关系不大,暂时比较怀疑编译库的工具链。由于之前遇到过 ndk 编译出的 sscanf 等函数调用卡死,所以这货暂时列为A级怀疑对象。