From 87c5aabc2f72be785477877eee8e03c00ddb538d Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sat, 29 Feb 2020 16:46:46 -0800 Subject: [PATCH] server close connection on stop() --- src/server.cpp | 9 ++++++++- src/serverconn.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/server.cpp b/src/server.cpp index f97bb33..7435ad4 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -401,9 +401,9 @@ void Server::Pvt::stop() L->stop(); } - // stop accepting new TCP connections acceptor_loop.call([this]() { + // stop accepting new TCP connections for(auto& iface : interfaces) { if(evconnlistener_disable(iface.listener.get())) { log_err_printf(serversetup, "Error disabling listener on %s\n", iface.name.c_str()); @@ -411,6 +411,13 @@ void Server::Pvt::stop() log_debug_printf(serversetup, "Server disabled listener on %s\n", iface.name.c_str()); } + // close current TCP connections + auto conns = std::move(connections); + for(auto& pair : conns) { + pair.second->bev.reset(); + pair.second->cleanup(); + } + state = Stopped; }); } diff --git a/src/serverconn.h b/src/serverconn.h index 3cde70e..20107a9 100644 --- a/src/serverconn.h +++ b/src/serverconn.h @@ -139,7 +139,9 @@ private: void handle_GPR(pva_app_msg_t cmd); virtual std::shared_ptr self_from_this() override final; +public: virtual void cleanup() override final; +private: //void bevEvent(short events); virtual void bevRead() override final; virtual void bevWrite() override final;