任何可能对此有所了解的libcurl专家?
我注意到了这一点,因为我无法关闭libcurl VERBOSE:
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);
当我通过调用libcurl进行追踪时,我发现0L(长)被转换为非零数字,导致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 ++
答案 0 :(得分:1)
va_arg()
正在使用指针算术从va_list param
中提取0L。您可以在va_list
类型here或here上阅读更多内容。 不将您的0L转换为非零数字。
尝试在打开连接之前调用curl_easy_setopt()。文档说明您的详细设置是“设置为多次独立连接”(urldata.h ln 1537)。
如果您仍然不相信它有效,您可以将CURL *转换为 SessionHandle * 并在调试器中检查它,例如:
struct SessionHandle *data = reinterpret_cast<SessionHandle*>(curl);
// Inspect data->set.verbose
你会在urldata.h中找到SessionHandle的定义。