aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-11-11 20:05:00 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-11-11 20:05:24 +0000
commit3d649d528a9aea786ddfcce08e0691c251933c39 (patch)
tree2e1bcefa5d9df400603e3a80304521705d0b5f7c
parentMerge pull request #6088 (diff)
downloadmonero-3d649d528a9aea786ddfcce08e0691c251933c39.tar.xz
epee: close connection when the peer has done so
This fixes rapid reconnections failing as the peer hasn't yet worked out the other side is gone, and will reject "duplicate" connections until a timeout.
-rw-r--r--contrib/epee/include/net/abstract_tcp_server2.inl8
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 5d12f9466..128ff10aa 100644
--- a/contrib/epee/include/net/abstract_tcp_server2.inl
+++ b/contrib/epee/include/net/abstract_tcp_server2.inl
@@ -410,7 +410,12 @@ PRAGMA_WARNING_DISABLE_VS(4355)
else
{
_dbg3("[sock " << socket().native_handle() << "] peer closed connection");
- if (m_ready_to_close)
+ bool do_shutdown = false;
+ CRITICAL_REGION_BEGIN(m_send_que_lock);
+ if(!m_send_que.size())
+ do_shutdown = true;
+ CRITICAL_REGION_END();
+ if (m_ready_to_close || do_shutdown)
shutdown();
}
m_ready_to_close = true;
@@ -470,6 +475,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
{
MERROR("SSL handshake failed");
boost::interprocess::ipcdetail::atomic_write32(&m_want_close_connection, 1);
+ m_ready_to_close = true;
bool do_shutdown = false;
CRITICAL_REGION_BEGIN(m_send_que_lock);
if(!m_send_que.size())