prevent TCPServer thread from stopping of poll() throws (due to resource issues)

This commit is contained in:
Guenter Obiltschnig 2016-03-05 14:42:18 +01:00
parent 830894792d
commit 2e8674a54d

View File

@ -115,33 +115,43 @@ void TCPServer::run()
while (!_stopped) while (!_stopped)
{ {
Poco::Timespan timeout(250000); Poco::Timespan timeout(250000);
if (_socket.poll(timeout, Socket::SELECT_READ)) try
{ {
try if (_socket.poll(timeout, Socket::SELECT_READ))
{ {
StreamSocket ss = _socket.acceptConnection(); try
// enable nodelay per default: OSX really needs that
#if defined(POCO_OS_FAMILY_UNIX)
if (ss.address().family() != AddressFamily::UNIX_LOCAL)
#endif
{ {
ss.setNoDelay(true); StreamSocket ss = _socket.acceptConnection();
// enable nodelay per default: OSX really needs that
#if defined(POCO_OS_FAMILY_UNIX)
if (ss.address().family() != AddressFamily::UNIX_LOCAL)
#endif
{
ss.setNoDelay(true);
}
_pDispatcher->enqueue(ss);
}
catch (Poco::Exception& exc)
{
ErrorHandler::handle(exc);
}
catch (std::exception& exc)
{
ErrorHandler::handle(exc);
}
catch (...)
{
ErrorHandler::handle();
} }
_pDispatcher->enqueue(ss);
}
catch (Poco::Exception& exc)
{
ErrorHandler::handle(exc);
}
catch (std::exception& exc)
{
ErrorHandler::handle(exc);
}
catch (...)
{
ErrorHandler::handle();
} }
} }
catch (Poco::Exception& exc)
{
ErrorHandler::handle(exc);
// possibly a resource issue since poll() failed;
// give some time to recover before trying again
Poco::Thread::sleep(50);
}
} }
} }