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()から 0L を抽出するためにポインター演算を使用していますva_list paramva_listタイプの詳細については、こちらまたはこちらをご覧ください。0L をゼロ以外の数値に変換していません。

接続を開く前にcurl_easy_setopt() を呼び出してみてください。ドキュメントには、冗長設定が「多くの独立した接続のために一度設定する」(urldata.h ln 1537) と記載されています。

それでも動作していると思わない場合は、CURL* をSessionHandle*にキャストし、デバッガーで検査できます。次に例を示します。

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

SessionHandle の定義は urldata.h にあります。

于 2012-08-30T01:05:00.960 に答える