diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-04-12 18:12:04 +0000 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-04-12 18:13:31 +0000 |
commit | c3cf930f75d0d4a3bbcfb0029c481a6de4406a9d (patch) | |
tree | e2a7d7c7e24811689a77952473ae849c04c846c6 /contrib/epee/include/net/abstract_tcp_server2.inl | |
parent | Merge pull request #5386 (diff) | |
download | monero-c3cf930f75d0d4a3bbcfb0029c481a6de4406a9d.tar.xz |
abstract_tcp_server2: fix timeout on exit
When closing connections due to exiting, the IO service is
already gone, so the data exchange needed for a gracious SSL
shutdown cannot happen. We just close the socket in that case.
Diffstat (limited to 'contrib/epee/include/net/abstract_tcp_server2.inl')
-rw-r--r-- | contrib/epee/include/net/abstract_tcp_server2.inl | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl index 14fbec5d9..821594355 100644 --- a/contrib/epee/include/net/abstract_tcp_server2.inl +++ b/contrib/epee/include/net/abstract_tcp_server2.inl @@ -762,7 +762,11 @@ PRAGMA_WARNING_DISABLE_VS(4355) m_timer.cancel(); boost::system::error_code ignored_ec; if (m_ssl_support == epee::net_utils::ssl_support_t::e_ssl_support_enabled) - socket_.shutdown(ignored_ec); + { + const shared_state &state = static_cast<const shared_state&>(get_state()); + if (!state.stop_signal_sent) + socket_.shutdown(ignored_ec); + } socket().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored_ec); if (!m_host.empty()) { @@ -1130,6 +1134,8 @@ POP_WARNINGS void boosted_tcp_server<t_protocol_handler>::send_stop_signal() { m_stop_signal_sent = true; + typename connection<t_protocol_handler>::shared_state *state = static_cast<typename connection<t_protocol_handler>::shared_state*>(m_state.get()); + state->stop_signal_sent = true; TRY_ENTRY(); connections_mutex.lock(); for (auto &c: connections_) |