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

时间:2018-06-22 12:02:00

标签: c++ c libcurl

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

1 个答案:

答案 0 :(得分:3)

不。无法找到原因。从该库的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()失败了。如果您自己事先没有{@ {1}}会自动调用它。 curl_easy_init()-与  curl_global_init()-实际上会返回错误代码。

故事的道德感...
调用curl_easy_init()之前,请先调用curl_global_init(...)并检查其返回值。不要依靠curl_easy_init()自动完成操作。

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

例如

Curl_open()