[英]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.