Skip to content

Commit 3b0ebb3

Browse files
committed
http: don't re-use connections when slots are full
If we're unable to service a request, close the connection rather than potentially keeping it alive longer. This helps to be slightly more fair to new connections.
1 parent c56cf1a commit 3b0ebb3

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

src/httpserver.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ static void http_request_cb(struct evhttp_request* req, void* arg)
313313
bev = evhttp_connection_get_bufferevent(conn);
314314
}
315315
if (!bev) {
316+
hreq->WriteHeader("Connection", "close");
316317
hreq->WriteReplyImmediate(HTTP_INTERNAL, "Unknown error\n");
317318
return;
318319
}
@@ -321,6 +322,7 @@ static void http_request_cb(struct evhttp_request* req, void* arg)
321322
evhttp_connection_set_closecb(conn, connection_close_cb, limiter);
322323
limiter->AddConnection(bufferevent_getfd(bev));
323324
if (!limiter->IsReady()) {
325+
hreq->WriteHeader("Connection", "close");
324326
hreq->WriteReplyImmediate(HTTP_SERVUNAVAIL, "No connection slots available\n");
325327
return;
326328
}
@@ -366,6 +368,7 @@ static void http_request_cb(struct evhttp_request* req, void* arg)
366368
item.release(); /* if true, queue took ownership */
367369
} else {
368370
LogPrintf("WARNING: request rejected because http work queue depth exceeded, it can be increased with the -rpcworkqueue= setting\n");
371+
item->req->WriteHeader("Connection", "close");
369372
item->req->WriteReplyImmediate(HTTP_INTERNAL, "Work queue depth exceeded");
370373
}
371374
} else {

0 commit comments

Comments
 (0)