http: Send "Connection: close" header if shutdown is requested

Sending the header "Connection: close" makes libevent close persistent
connections (implicit with HTTP 1.1) which cleans the event base when
shutdown is requested.
This commit is contained in:
João Barbosa 2018-11-07 09:08:56 +00:00
parent 02e1e4eff6
commit 18e9685816

View file

@ -10,6 +10,7 @@
#include <util/strencodings.h> #include <util/strencodings.h>
#include <netbase.h> #include <netbase.h>
#include <rpc/protocol.h> // For HTTP status codes #include <rpc/protocol.h> // For HTTP status codes
#include <shutdown.h>
#include <sync.h> #include <sync.h>
#include <ui_interface.h> #include <ui_interface.h>
@ -583,6 +584,9 @@ void HTTPRequest::WriteHeader(const std::string& hdr, const std::string& value)
void HTTPRequest::WriteReply(int nStatus, const std::string& strReply) void HTTPRequest::WriteReply(int nStatus, const std::string& strReply)
{ {
assert(!replySent && req); assert(!replySent && req);
if (ShutdownRequested()) {
WriteHeader("Connection", "close");
}
// Send event to main http thread to send reply message // Send event to main http thread to send reply message
struct evbuffer* evb = evhttp_request_get_output_buffer(req); struct evbuffer* evb = evhttp_request_get_output_buffer(req);
assert(evb); assert(evb);