diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-03-17 00:19:35 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-03-20 23:45:01 +0800 |
| commit | 35cde25820fe9077dbc195d3b1485cd3fb82813f (patch) | |
| tree | 1932a1ba2e916a798c3a46e698e7d1bdaa49432d /src/session.cpp | |
| parent | ad4ae6449221edbbe5fcec9c366b1748fea2ba17 (diff) | |
feat: kick client (#6)
Diffstat (limited to 'src/session.cpp')
| -rw-r--r-- | src/session.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
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 <typename... Args> @@ -208,7 +206,8 @@ void CSession::setSelf(std::pair<std::jthread, std::shared_ptr<CSession>> *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); } |
