diff --git a/CHANGELOG b/CHANGELOG index 517554891..ecd8f3ab1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,18 +1,18 @@ This is the changelog file for the POCO C++ Libraries. -Release 1.5.0 (2012-07-04) +Release 1.5.0 (2012-07-30) ========================== - added JSON - added Util::JSONConfiguration - added PDF -- added PRoGen -- added FIFOBuffer +- added FIFOBuffer and FIFOBufferStream - fixed SF# 3522906: Unregistering handlers from SocketReactor - fixed SF# 3522084: AbstractConfiguration does not support 64-bit integers +- HTTPServer::stopAll(): close the socket instead of just shutting it down, as the latter won't wake up a select() on Windows -Release 1.4.4 (2012-04-??) +Release 1.4.4 (2012-07-??) ========================== - ZipStream now builds correctly in unbundled build. diff --git a/Net/src/HTTPServerConnection.cpp b/Net/src/HTTPServerConnection.cpp index 67d750e2a..7dd13919e 100644 --- a/Net/src/HTTPServerConnection.cpp +++ b/Net/src/HTTPServerConnection.cpp @@ -78,34 +78,36 @@ void HTTPServerConnection::run() try { Poco::FastMutex::ScopedLock lock(_mutex); - - HTTPServerResponseImpl response(session); - HTTPServerRequestImpl request(response, session, _pParams); + if (!_stopped) + { + HTTPServerResponseImpl response(session); + HTTPServerRequestImpl request(response, session, _pParams); - Poco::Timestamp now; - response.setDate(now); - response.setVersion(request.getVersion()); - response.setKeepAlive(_pParams->getKeepAlive() && request.getKeepAlive() && session.canKeepAlive()); - if (!server.empty()) - response.set("Server", server); - try - { - std::auto_ptr pHandler(_pFactory->createRequestHandler(request)); - if (pHandler.get()) + Poco::Timestamp now; + response.setDate(now); + response.setVersion(request.getVersion()); + response.setKeepAlive(_pParams->getKeepAlive() && request.getKeepAlive() && session.canKeepAlive()); + if (!server.empty()) + response.set("Server", server); + try { - if (request.expectContinue()) - response.sendContinue(); + std::auto_ptr pHandler(_pFactory->createRequestHandler(request)); + if (pHandler.get()) + { + if (request.expectContinue()) + response.sendContinue(); - pHandler->handleRequest(request, response); - session.setKeepAlive(_pParams->getKeepAlive() && response.getKeepAlive() && session.canKeepAlive()); + pHandler->handleRequest(request, response); + session.setKeepAlive(_pParams->getKeepAlive() && response.getKeepAlive() && session.canKeepAlive()); + } + else sendErrorResponse(session, HTTPResponse::HTTP_NOT_IMPLEMENTED); + } + catch (Poco::Exception&) + { + if (!response.sent()) + sendErrorResponse(session, HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); + throw; } - else sendErrorResponse(session, HTTPResponse::HTTP_NOT_IMPLEMENTED); - } - catch (Poco::Exception&) - { - if (!response.sent()) - sendErrorResponse(session, HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); - throw; } } catch (NoMessageException&) @@ -138,7 +140,7 @@ void HTTPServerConnection::onServerStopped(const bool& abortCurrent) { try { - socket().shutdown(); + socket().close(); } catch (...) { @@ -150,7 +152,7 @@ void HTTPServerConnection::onServerStopped(const bool& abortCurrent) try { - socket().shutdown(); + socket().close(); } catch (...) {