diff --git a/repertory/librepertory/include/comm/packet/packet_client.hpp b/repertory/librepertory/include/comm/packet/packet_client.hpp index 3389ea56..a48060fc 100644 --- a/repertory/librepertory/include/comm/packet/packet_client.hpp +++ b/repertory/librepertory/include/comm/packet/packet_client.hpp @@ -57,6 +57,7 @@ private: resolve_results_; std::mutex clients_mutex_; std::vector> clients_; + std::vector service_threads_; private: static void close(client &cli); diff --git a/repertory/librepertory/src/comm/packet/packet_client.cpp b/repertory/librepertory/src/comm/packet/packet_client.cpp index 412cc4e0..8ea562c0 100644 --- a/repertory/librepertory/src/comm/packet/packet_client.cpp +++ b/repertory/librepertory/src/comm/packet/packet_client.cpp @@ -33,12 +33,23 @@ using namespace repertory::comm; namespace repertory { packet_client::packet_client(remote::remote_config cfg) - : cfg_(std::move(cfg)), unique_id_(utils::create_uuid_string()) {} + : cfg_(std::move(cfg)), unique_id_(utils::create_uuid_string()) { + for (std::uint8_t idx = 0U; idx < cfg.max_connections; ++idx) { + service_threads_.emplace_back([this]() { io_context_.run(); }); + } +} packet_client::~packet_client() { allow_connections_ = false; close_all(); - io_context_.stop(); + + for (std::size_t idx = 0U; idx < service_threads_.size(); ++idx) { + io_context_.stop(); + } + + for (auto &thread : service_threads_) { + thread.join(); + } } void packet_client::close(client &cli) { @@ -58,7 +69,9 @@ void packet_client::close_all() { } clients_.clear(); - io_context_.restart(); + for (std::size_t idx = 0U; idx < service_threads_.size(); ++idx) { + io_context_.restart(); + } resolve_results_ = {}; unique_id_ = utils::create_uuid_string(); }