0

任何可能对此有所了解的 libcurl 专家?

我注意到这一点是因为我无法关闭 libcurl VERBOSE:

curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);

当我通过对 libcurl 的调用进行跟踪时,我发现 0L(long)被转换为非零数字,导致 VERBOSE 始终处于打开状态。我没有尝试过,但我很确定任何长参数都不会正确传递。

data->set.verbose = (0 != va_arg(param, long))?TRUE:FALSE;

在哪里

#define va_arg _crt_va_arg
#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

但我不确定这些在做什么。
为什么会发生这种情况以及如何解决?

我正在使用带有 libcurl 7.27.0 的 Visual Studio 2010 C++

4

1 回答 1

1

va_arg()正在使用指针算法从您的va_list param. 您可以在此处此处阅读有关va_list类型的更多信息。它不会将您的 0L 转换为非零数字。

在打开连接之前尝试调用 curl_easy_setopt() 。该文档指出,您的详细设置是“设置一次即可进行许多独立连接”(urldata.h ln 1537)。

如果您仍然不相信它正在工作,您可以将您的 CURL* 转换为SessionHandle*并在调试器中检查它,例如:

struct SessionHandle *data = reinterpret_cast<SessionHandle*>(curl);
// Inspect data->set.verbose

您将在 urldata.h 中找到 SessionHandle 的定义。

于 2012-08-30T01:05:00.960 回答