in src/main/cpp/telnetappender.cpp [238:313]
void TelnetAppender::acceptConnections()
{
// main loop; is left when This->closed is != 0 after an accept()
while (true)
{
try
{
SocketPtr newClient = _priv->serverSocket->accept();
bool done = _priv->closed;
if (done)
{
Pool p;
writeStatus(newClient, LOG4CXX_STR("Log closed.\r\n"), p);
newClient->close();
break;
}
size_t count = _priv->activeConnections;
if (count >= _priv->connections.size())
{
Pool p;
writeStatus(newClient, LOG4CXX_STR("Too many connections.\r\n"), p);
newClient->close();
}
else
{
//
// find unoccupied connection
//
std::lock_guard<std::recursive_mutex> lock(_priv->mutex);
for (ConnectionList::iterator iter = _priv->connections.begin();
iter != _priv->connections.end();
iter++)
{
if (*iter == NULL)
{
*iter = newClient;
_priv->activeConnections++;
break;
}
}
Pool p;
LogString oss(LOG4CXX_STR("TelnetAppender v1.0 ("));
StringHelper::toString((int) count + 1, p, oss);
oss += LOG4CXX_STR(" active connections)\r\n\r\n");
writeStatus(newClient, oss, p);
}
}
catch (InterruptedIOException&)
{
if (_priv->closed)
{
break;
}
}
catch (Exception& e)
{
if (!_priv->closed)
{
LogLog::error(LOG4CXX_STR("Encountered error while in SocketHandler loop."), e);
}
else
{
break;
}
}
}
}