From a80d76b66e6e4ac026d4a7ff3aaee0963a8f2e11 Mon Sep 17 00:00:00 2001 From: renezander030 Date: Thu, 8 May 2025 08:28:54 +0200 Subject: [PATCH] added timeout for upstream server to stop hanging on second request --- http-to-https-proxy.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/http-to-https-proxy.go b/http-to-https-proxy.go index e4983f4..4536f4d 100644 --- a/http-to-https-proxy.go +++ b/http-to-https-proxy.go @@ -2,12 +2,14 @@ package main import ( "crypto/tls" + "fmt" "io" "log" "net/http" "net/http/httputil" "os" "strconv" + "time" ) var versionCode = "v0.3" @@ -76,6 +78,8 @@ func handler(responseToRequest http.ResponseWriter, incomingRequest *http.Reques defer returnConn.Close() + conn.SetDeadline(time.Now().Add(3 * time.Second)) + readBuf := make([]byte, proxyBufferSize) for { @@ -106,6 +110,8 @@ func handler(responseToRequest http.ResponseWriter, incomingRequest *http.Reques log.Println("End of handler") + io.WriteString(responseToRequest, "I am slow!\n") + } func main() { @@ -158,4 +164,14 @@ func main() { if err := http.ListenAndServe(":"+strconv.Itoa(httpListenPort), nil); err != nil { log.Fatal(err) } + + srv := http.Server{ + Addr: ":" + strconv.Itoa(httpListenPort), + WriteTimeout: 5 * time.Second, + Handler: http.TimeoutHandler(http.HandlerFunc(handler), 1*time.Second, "Timeout!\n"), + } + + if err := srv.ListenAndServe(); err != nil { + fmt.Printf("Server failed: %s\n", err) + } }