From 05453881c308b88ed6991e2ff9d6ac322dfac7c8 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Thu, 21 Mar 2024 19:01:44 +0900 Subject: [PATCH] Set a 2-second timeout for POST requests Close #3685 --- src/server.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server.go b/src/server.go index c3954d8..082d927 100644 --- a/src/server.go +++ b/src/server.go @@ -32,6 +32,7 @@ const ( httpUnauthorized = "HTTP/1.1 401 Unauthorized" + crlf httpUnavailable = "HTTP/1.1 503 Service Unavailable" + crlf httpReadTimeout = 10 * time.Second + channelTimeout = 2 * time.Second jsonContentType = "Content-Type: application/json" + crlf maxContentLength = 1024 * 1024 ) @@ -170,7 +171,7 @@ func (server *httpServer) handleHttpRequest(conn net.Conn) string { select { case response := <-server.responseChannel: return good(response) - case <-time.After(2 * time.Second): + case <-time.After(channelTimeout): go func() { // Drain the channel <-server.responseChannel @@ -227,7 +228,11 @@ func (server *httpServer) handleHttpRequest(conn net.Conn) string { return bad("no action specified") } - server.actionChannel <- actions + select { + case server.actionChannel <- actions: + case <-time.After(channelTimeout): + return httpUnavailable + crlf + } return httpOk + crlf }