diff --git a/src/ripple/app/misc/detail/WorkBase.h b/src/ripple/app/misc/detail/WorkBase.h index 35ee573d43..01d0c380f8 100644 --- a/src/ripple/app/misc/detail/WorkBase.h +++ b/src/ripple/app/misc/detail/WorkBase.h @@ -97,6 +97,10 @@ public: void onResponse(error_code const& ec); + +private: + void + close(); }; //------------------------------------------------------------------------------ @@ -125,6 +129,7 @@ WorkBase::~WorkBase() if (cb_) cb_(make_error_code(boost::system::errc::not_a_socket), std::move(res_)); + close(); } template @@ -228,11 +233,26 @@ WorkBase::onResponse(error_code const& ec) if (ec) return fail(ec); + close(); assert(cb_); cb_(ec, std::move(res_)); cb_ = nullptr; } +template +void +WorkBase::close() +{ + if (socket_.is_open()) + { + error_code ec; + socket_.shutdown(boost::asio::socket_base::shutdown_send, ec); + if (ec) + return; + socket_.close(ec); + } +} + } // namespace detail } // namespace ripple