1

libcurl大きなデータ(最大10K)を受信するように受信機能をカスタマイズしたい。

私の現在の実装は次のとおりです。

static size_t wt_callback(char *ptr, size_t size, size_t nmb,
        void *data) {
    int len = size * nmb;

    struct response *rsp = (struct response *)data;
    int byte = len < rsp->buf_left ? len : rsp->buf_left;
    if (rsp->buf_offset == 0) {
        memset(rsp->buffer, 0, rsp->buf_left);
    }
    memcpy(rsp->buffer + rsp->buf_offset, ptr, byte);
    rsp->buf_offset += byte;
    rsp->buf_left   -= byte;

    return byte;
}

および構造の定義:

struct response {
    char *buffer;
    int  buf_left;
    int  buf_offset;
};

カスタマイズされた受信機能をインストールします。

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, wt_callback);
                                        /* How data is received */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
                                        /* Where to store incoming data */

responseとして入力されstruct response *ます。

現在の問題は、関数が呼び出されないことですが、サーバーが応答wt_callbackしたことは確かです(ネットワークをスニッフィングします)。wireshark

どこに閉じ込められているのか、または受信関数の実装に問題があるのか​​わかりません。ヒントや提案は大歓迎です。

よろしくお願いします。

4

1 に答える 1

1

書き込みコールバックが呼び出されない場合、問題はコールバック関数自体ではほとんどありません。残りのコードを見せてくれなかったので、推測するのは本当に難しいです。おそらく、動作することがわかっている同様の機能を備えたサンプルコードからインスピレーションを得ることができます。

http://curl.haxx.se/libcurl/c/getinmemory.html

于 2012-05-15T12:50:10.627 に答える