mirror of
https://github.com/pocoproject/poco.git
synced 2025-06-13 09:22:08 +02:00
prevent TCPServer thread from stopping of poll() throws (due to resource issues)
This commit is contained in:
parent
830894792d
commit
2e8674a54d
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user