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;