diff --git a/libi2pd/Streaming.h b/libi2pd/Streaming.h index bf3c5e5d..0c5c017b 100644 --- a/libi2pd/Streaming.h +++ b/libi2pd/Streaming.h @@ -422,18 +422,29 @@ namespace stream else if (ecode == boost::asio::error::operation_aborted) { // timeout not expired - if (m_Status == eStreamStatusClosed || m_Status == eStreamStatusTerminated) - handler (boost::asio::error::make_error_code (boost::asio::error::eof), 0); - else if (m_Status == eStreamStatusReset) - handler (boost::asio::error::make_error_code (boost::asio::error::connection_reset), 0); - else - handler (boost::asio::error::make_error_code (boost::asio::error::operation_aborted), 0); + boost::system::error_code retCode; + switch (m_Status) + { + case eStreamStatusClosed: + case eStreamStatusTerminated: + retCode = boost::asio::error::make_error_code (boost::asio::error::eof); + break; + case eStreamStatusReset: + retCode = boost::asio::error::make_error_code (boost::asio::error::connection_reset); + break; + case eStreamStatusNew: + retCode = boost::asio::error::make_error_code (boost::asio::error::not_connected); + break; + default: + retCode = boost::asio::error::make_error_code (boost::asio::error::operation_aborted); + } + handler (retCode, 0); } else { // timeout expired if (remainingTimeout <= 0) - handler (boost::asio::error::make_error_code (boost::asio::error::timed_out), received); + handler (boost::asio::error::make_error_code (boost::asio::error::timed_out), 0); else { // intermediate interrupt