Reserve base port for incoming handler

master
Geoffrey Merck 5 years ago
parent 42d1e05d02
commit 633205a94d

@ -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()) {

@ -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<unsigned int, CDExtraProtocolHandler *> m_pool;
std::map<unsigned int, CDExtraProtocolHandler *>::iterator m_index;
unsigned int m_basePort;

Loading…
Cancel
Save

Powered by TurnKey Linux.