awaitable server close fix.

Closes #2637
This commit is contained in:
Klemens Morgenstern
2023-02-20 13:58:07 +08:00
parent 78c21308fa
commit 2bd65b27e1

View File

@ -215,14 +215,13 @@ do_session(
tcp_stream stream,
std::shared_ptr<std::string const> doc_root)
{
beast::error_code ec;
// This buffer is required to persist across reads
beast::flat_buffer buffer;
// This lambda is used to send messages
for(;;)
try
{
for(;;)
{
// Set the timeout.
stream.expires_after(std::chrono::seconds(30));
@ -248,6 +247,7 @@ do_session(
break;
}
}
}
catch (boost::system::system_error & se)
{
if (se.code() != http::error::end_of_stream )
@ -255,9 +255,12 @@ do_session(
}
// Send a TCP shutdown
beast::error_code ec;
stream.socket().shutdown(tcp::socket::shutdown_send, ec);
// At this point the connection is closed gracefully
// we ignore the error because the client might have
// dropped the connection already.
}
//------------------------------------------------------------------------------
@ -287,6 +290,7 @@ do_listen(
do_session(tcp_stream(co_await acceptor.async_accept()), doc_root),
[](std::exception_ptr e)
{
if (e)
try
{
std::rethrow_exception(e);