问题描述:
调用 curl 获取消息头的时候,发现程序卡住不动了。代码如下:
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); // 这句直接卡死,没有任何返回
经测试发现,不做任何设置,做一次发送,同样会卡死。
curl_easy_setopt(curl, CURLOPT_URL, srcUrl.c_str());
curl_easy_perform(curl); // 这句直接卡死,没有任何返回
解决方案:
经过反复试验,在请求的时候设置写数据回调,就可以正常执行了。
void size_t writeFunc(void *ptr, size_t size, size_t nmemb, void *userdata)
{
return 0;
}
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级怀疑对象。