From 633205a94d9b7acc32147987440491a72057e36a Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sun, 26 Dec 2021 07:31:30 +0100 Subject: [PATCH] Reserve base port for incoming handler --- DExtraProtocolHandlerPool.cpp | 12 +++++++++++- DExtraProtocolHandlerPool.h | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/DExtraProtocolHandlerPool.cpp b/DExtraProtocolHandlerPool.cpp index bbb7411..23ac48b 100644 --- a/DExtraProtocolHandlerPool.cpp +++ b/DExtraProtocolHandlerPool.cpp @@ -40,11 +40,21 @@ CDExtraProtocolHandlerPool::~CDExtraProtocolHandlerPool() } } +CDExtraProtocolHandler* CDExtraProtocolHandlerPool::getIncomingHandler() +{ + return getHandler(m_basePort); +} + CDExtraProtocolHandler* CDExtraProtocolHandlerPool::getHandler() { - unsigned int port = m_basePort; + return getHandler(m_basePort + 1U); +} + +CDExtraProtocolHandler* CDExtraProtocolHandlerPool::getHandler(unsigned int port) +{ while (m_pool.end() != m_pool.find(port)) port++; // find an unused port + CDExtraProtocolHandler *proto = new CDExtraProtocolHandler(port, m_address); if (proto) { if (proto->open()) { diff --git a/DExtraProtocolHandlerPool.h b/DExtraProtocolHandlerPool.h index f5b7d5c..86bee28 100644 --- a/DExtraProtocolHandlerPool.h +++ b/DExtraProtocolHandlerPool.h @@ -30,6 +30,7 @@ public: ~CDExtraProtocolHandlerPool(); CDExtraProtocolHandler *getHandler(); + CDExtraProtocolHandler *getIncomingHandler(); void release(CDExtraProtocolHandler *handler); DEXTRA_TYPE read(); @@ -41,6 +42,8 @@ public: void close(); private: + CDExtraProtocolHandler *getHandler(unsigned int port); + std::map m_pool; std::map::iterator m_index; unsigned int m_basePort;