简体   繁体   English

c++ boost http 程序,什么是“需要缓冲”错误?

[英]c++ boost http program, what's "need buffer" error?

Sometimes, boost http client async read response get an error code 5, message is "need buffer", I can't find any infomation about this error code, what's this error code mean?有时,boost http 客户端异步读取响应得到一个错误代码 5,消息是“需要缓冲区”,我找不到关于这个错误代码的任何信息,这个错误代码是什么意思?

在此处输入图像描述

void
    do_read()
{
    // Make the request empty before reading,
    // otherwise the operation behavior is undefined.
    std::shared_ptr<boost::beast::http::response<boost::beast::http::buffer_body>> p_read_remote_server_response =  std::make_shared<boost::beast::http::response<boost::beast::http::buffer_body>>(); ;

    std::shared_ptr<boost::beast::flat_buffer> p_read_remote_server_buffer = std::make_shared<boost::beast::flat_buffer>(15000000);
    // Read a response
    boost::beast::http::async_read(*pClientToServerStream, *p_read_remote_server_buffer, *p_read_remote_server_response,
        boost::bind(&DCClient::on_read_remote_server,
            shared_from_this(), p_read_remote_server_buffer, p_read_remote_server_response, _1, _2));
}

void
    on_read_remote_server(
        std::shared_ptr<boost::beast::flat_buffer> p_read_remote_server_buffer, 
        std::shared_ptr<boost::beast::http::response<boost::beast::http::buffer_body>> p_read_remote_server_response, 
        boost::beast::error_code ec,
        std::size_t bytes_transferred)
{
    boost::ignore_unused(bytes_transferred);

    std::stringstream strstm;
    strstm.write((const char *)((*p_read_remote_server_buffer).data().data()), bytes_transferred);
    std::string s = strstm.str();

    // This means they closed the connection
    if (ec == boost::beast::http::error::end_of_stream)
        return do_close();

    if (ec)
        throw boost::system::system_error{ ec };
}

And the response is wrong, method on_read_remote_server parameter bytes_transferred is 124, I convert response to a string, this string missing http headers, only body:而响应是错误的,方法on_read_remote_server参数bytes_transferred是124,我将响应转换为一个字符串,这个字符串缺少http个头,只有主体:

std::stringstream strstm;
    strstm.write((const char *)((*p_read_remote_server_buffer).data().data()), bytes_transferred);
    std::string s = strstm.str();

Stumbled onto this just now.刚才偶然发现了这个。 You need to do request.body().more = false;你需要做request.body().more = false; and then it should work.然后它应该工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM