gpt4 book ai didi

c++ - curl_easy_init 失败时如何获取错误原因

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:19 26 4
gpt4 key购买 nike

curl_easy_init失败时,是否可能得到错误代码(如errno)或错误描述(如curl_easy_strerror)?

最佳答案

没有。不可能得到原因。从库的 7.58.0 版本的源代码...

struct Curl_easy *curl_easy_init(void) {
CURLcode result;
struct Curl_easy *data;

// Etc..

result = Curl_open(&data);
if (result) {
DEBUGF(fprintf(stderr, "Error: Curl_open failed\n"));
return NULL;
}

return data;
}

如您所见,如果 Curl_open(...) 失败,库只会输出错误并中止:它不会修改任何状态变量,例如 errno 您可以稍后检查以确定失败的原因。

但是,如果调用失败,可能是因为 curl_global_init() 失败了。 curl_easy_init() 如果您事先没有自己调用它,则会自动调用它。 curl_global_init() - 不像 curl_easy_init() - 实际上确实返回错误代码。

故事的寓意......
调用 curl_global_init(...) 并在调用 curl_easy_init() 之前检查其返回值。不要依赖 curl_easy_init() 自动执行。

这至少可以让您辨别 curl_global_init(...)Curl_open() 是否失败。

例如

CURLcode res = curl_global_init(CURL_GLOBAL_ALL);
if (res != 0) {
fprintf("Failed global init ...\n");
exit(1);
}
CURL *curl = curl_easy_init();
if (!curl) {
///
}

// Etc.

curl_easy_cleanup(curl);
curl_global_cleanup();

关于c++ - curl_easy_init 失败时如何获取错误原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50987505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com