diff --git a/lib/remote/httpserverconnection.cpp b/lib/remote/httpserverconnection.cpp index aed0fd752..a73e99f82 100644 --- a/lib/remote/httpserverconnection.cpp +++ b/lib/remote/httpserverconnection.cpp @@ -21,10 +21,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -154,16 +156,19 @@ bool EnsureValidHeaders( http::async_read_header(stream, buf, parser, yc[ec]); if (ec) { + if (ec == boost::asio::error::operation_aborted) + return false; + errorMsg = ec.message(); httpError = true; - } - - switch (parser.get().version()) { - case 10: - case 11: - break; - default: - errorMsg = "Unsupported HTTP version"; + } else { + switch (parser.get().version()) { + case 10: + case 11: + break; + default: + errorMsg = "Unsupported HTTP version"; + } } if (!errorMsg.IsEmpty() || httpError) { @@ -390,6 +395,9 @@ bool EnsureValidBody( http::async_read(stream, buf, parser, yc[ec]); if (ec) { + if (ec == boost::asio::error::operation_aborted) + return false; + /** * Unfortunately there's no way to tell an HTTP protocol error * from an error on a lower layer: @@ -443,6 +451,12 @@ bool ProcessRequest( return false; } + auto sysErr (dynamic_cast(&ex)); + + if (sysErr && sysErr->code() == boost::asio::error::operation_aborted) { + throw; + } + http::response response; HttpUtility::SendJsonError(response, nullptr, 500, "Unhandled exception" , DiagnosticInformation(ex));