Skip to content

Commit d9dd2a8

Browse files
committed
HTTPServer::stopAll(): close the socket instead of just shutting it down, as the latter won't wake up a select() on Windows
1 parent 378077f commit d9dd2a8

2 files changed

Lines changed: 32 additions & 30 deletions

File tree

CHANGELOG

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
This is the changelog file for the POCO C++ Libraries.
22

33

4-
Release 1.5.0 (2012-07-04)
4+
Release 1.5.0 (2012-07-30)
55
==========================
66

77
- added JSON
88
- added Util::JSONConfiguration
99
- added PDF
10-
- added PRoGen
11-
- added FIFOBuffer
10+
- added FIFOBuffer and FIFOBufferStream
1211
- fixed SF# 3522906: Unregistering handlers from SocketReactor
1312
- fixed SF# 3522084: AbstractConfiguration does not support 64-bit integers
13+
- HTTPServer::stopAll(): close the socket instead of just shutting it down, as the latter won't wake up a select() on Windows
1414

15-
Release 1.4.4 (2012-04-??)
15+
Release 1.4.4 (2012-07-??)
1616
==========================
1717

1818
- ZipStream now builds correctly in unbundled build.

Net/src/HTTPServerConnection.cpp

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -78,34 +78,36 @@ void HTTPServerConnection::run()
7878
try
7979
{
8080
Poco::FastMutex::ScopedLock lock(_mutex);
81-
82-
HTTPServerResponseImpl response(session);
83-
HTTPServerRequestImpl request(response, session, _pParams);
84-
85-
Poco::Timestamp now;
86-
response.setDate(now);
87-
response.setVersion(request.getVersion());
88-
response.setKeepAlive(_pParams->getKeepAlive() && request.getKeepAlive() && session.canKeepAlive());
89-
if (!server.empty())
90-
response.set("Server", server);
91-
try
81+
if (!_stopped)
9282
{
93-
std::auto_ptr<HTTPRequestHandler> pHandler(_pFactory->createRequestHandler(request));
94-
if (pHandler.get())
83+
HTTPServerResponseImpl response(session);
84+
HTTPServerRequestImpl request(response, session, _pParams);
85+
86+
Poco::Timestamp now;
87+
response.setDate(now);
88+
response.setVersion(request.getVersion());
89+
response.setKeepAlive(_pParams->getKeepAlive() && request.getKeepAlive() && session.canKeepAlive());
90+
if (!server.empty())
91+
response.set("Server", server);
92+
try
9593
{
96-
if (request.expectContinue())
97-
response.sendContinue();
94+
std::auto_ptr<HTTPRequestHandler> pHandler(_pFactory->createRequestHandler(request));
95+
if (pHandler.get())
96+
{
97+
if (request.expectContinue())
98+
response.sendContinue();
9899

99-
pHandler->handleRequest(request, response);
100-
session.setKeepAlive(_pParams->getKeepAlive() && response.getKeepAlive() && session.canKeepAlive());
100+
pHandler->handleRequest(request, response);
101+
session.setKeepAlive(_pParams->getKeepAlive() && response.getKeepAlive() && session.canKeepAlive());
102+
}
103+
else sendErrorResponse(session, HTTPResponse::HTTP_NOT_IMPLEMENTED);
104+
}
105+
catch (Poco::Exception&)
106+
{
107+
if (!response.sent())
108+
sendErrorResponse(session, HTTPResponse::HTTP_INTERNAL_SERVER_ERROR);
109+
throw;
101110
}
102-
else sendErrorResponse(session, HTTPResponse::HTTP_NOT_IMPLEMENTED);
103-
}
104-
catch (Poco::Exception&)
105-
{
106-
if (!response.sent())
107-
sendErrorResponse(session, HTTPResponse::HTTP_INTERNAL_SERVER_ERROR);
108-
throw;
109111
}
110112
}
111113
catch (NoMessageException&)
@@ -138,7 +140,7 @@ void HTTPServerConnection::onServerStopped(const bool& abortCurrent)
138140
{
139141
try
140142
{
141-
socket().shutdown();
143+
socket().close();
142144
}
143145
catch (...)
144146
{
@@ -150,7 +152,7 @@ void HTTPServerConnection::onServerStopped(const bool& abortCurrent)
150152

151153
try
152154
{
153-
socket().shutdown();
155+
socket().close();
154156
}
155157
catch (...)
156158
{

0 commit comments

Comments
 (0)