Allow setting Read/Write/Idle timeouts

This commit is contained in:
DataHoarder 2022-06-09 17:49:40 +02:00
parent 517eb1652a
commit 953990eb8f
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
2 changed files with 17 additions and 10 deletions

View file

@ -27,12 +27,14 @@ type Server struct {
Debug bool Debug bool
Handler RequestHandler Handler RequestHandler
ReadTimeout time.Duration
WriteTimeout time.Duration
IdleTimeout time.Duration
extraHeadersMutex sync.RWMutex extraHeadersMutex sync.RWMutex
extraHeaders map[string]string extraHeaders map[string]string
} }
const ServeStreamChunked = -1
type RequestContext interface { type RequestContext interface {
GetPath() string GetPath() string
GetConnectionTime() time.Time GetConnectionTime() time.Time
@ -94,8 +96,9 @@ func (server *Server) Serve() {
} }
s := &fasthttp.Server{ s := &fasthttp.Server{
ReadTimeout: 5 * time.Second, ReadTimeout: server.ReadTimeout,
IdleTimeout: 15 * time.Second, WriteTimeout: server.WriteTimeout,
IdleTimeout: server.IdleTimeout,
Handler: func(ctx *fasthttp.RequestCtx) { Handler: func(ctx *fasthttp.RequestCtx) {
server.Handler(handler(ctx)) server.Handler(handler(ctx))
}, },
@ -137,10 +140,11 @@ func (server *Server) Serve() {
} }
s := &http.Server{ s := &http.Server{
ReadTimeout: 5 * time.Second, ReadTimeout: server.ReadTimeout,
IdleTimeout: 15 * time.Second, WriteTimeout: server.WriteTimeout,
Addr: server.ListenAddress, IdleTimeout: server.IdleTimeout,
TLSConfig: server.TLSConfig.Config, Addr: server.ListenAddress,
TLSConfig: server.TLSConfig.Config,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
server.Handler(handler(w, r)) server.Handler(handler(w, r))
}), }),
@ -175,8 +179,11 @@ func (server *Server) Serve() {
s := &http3.Server{ s := &http3.Server{
Server: &http.Server{ Server: &http.Server{
Addr: server.ListenAddress, ReadTimeout: server.ReadTimeout,
TLSConfig: server.TLSConfig.QUICConfig, WriteTimeout: server.WriteTimeout,
IdleTimeout: server.IdleTimeout,
Addr: server.ListenAddress,
TLSConfig: server.TLSConfig.QUICConfig,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if server.Debug { if server.Debug {
log.Print("Received HTTP/3 request") log.Print("Received HTTP/3 request")