Boost Beast 在 http:async_write 之后给出"The handle is invalid"错误



最初我得到错误";提供的文件句柄是无效的"。这是因为我的插座关闭了。我改正了那个错误。

现在我得到另一个错误"句柄是无效的"....你知道有什么问题吗

下面是我的代码,非常简单:
void BeastResponse::write(http::response<http::file_body> responseFile)
{
std::cout << "BeastResponse while file write: " << this << std::endl;

auto self = shared_from_this();
http::async_write(m_stream, responseFile, [self](beast::error_code ec, std::size_t t)
{
if (ec)
{
std::cout << "File Write Failed" << ": " << ec.message() << std::endl;
std::cout << t << std::endl;
}
else
{
std::cout << t << std::endl;
};
});
}

这里,当我得到错误时,t = 4kb。所以我认为async_write后,它做的第一个块4kb,我的处理程序或套接字是一个坏的状态。

如果更改为http:write而不是http:async_write,则没有问题

下面的代码为我工作…

void BeastResponse::write(http::response<http::file_body>&& responseFile)
{
std::cout << "BeastResponse while file write: " << this << std::endl;
auto self = shared_from_this();

// copy file into the member variable, m_response_file
m_response_file = std::move(responseFile)
// 2nd parameter must be a member variable of BeastResponse
http::async_write(m_stream, m_response_file, [self](beast::error_code ec, std::size_t t)
{
if (ec)
{
std::cout << "File Write Failed" << ": " << ec.message() << std::endl;
std::cout << t << std::endl;
}
else
{
std::cout << t << std::endl;
};
});
}

相关内容

最新更新