From 35cde25820fe9077dbc195d3b1485cd3fb82813f Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Mon, 17 Mar 2025 00:19:35 +0800 Subject: feat: kick client (#6) --- src/session.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/session.cpp') diff --git a/src/session.cpp b/src/session.cpp index d561a51..50eaff4 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -29,7 +29,6 @@ CSession::~CSession() { #endif m_sockfd.reset(); - self->second.reset(); log(LOG, "Client {}@{} disconnected", m_name, m_ip); log(TRACE, "session({}@{}): bye", m_name, m_ip); @@ -158,10 +157,9 @@ bool CSession::isValid() { if (!m_sockfd.isValid() || m_name.empty()) return false; - if (send(m_sockfd.get(), "", 0, MSG_NOSIGNAL) < 0) - return false; - - return true; + int err = 0; + socklen_t size = sizeof(err); + return getsockopt(m_sockfd.get(), SOL_SOCKET, SO_ERROR, &err, &size) >= 0 && err == 0; } template @@ -208,7 +206,8 @@ void CSession::setSelf(std::pair> *self) this->self = self; } -void CSession::onShutdown() { - write("Shutting down, bye"); - g_pSessionManager->removeSession(self); +void CSession::onKick(const std::string &reason, const bool &kill) { + if (!reason.empty()) + write(reason); + g_pSessionManager->removeSession(self, kill); } -- cgit v1.2.3