diff --git a/src/server.go b/src/server.go index c3954d8d..082d9278 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 }