Skip to content

Commit 816f0c9

Browse files
committed
Set default timeout for http server
Signed-off-by: Bryan Frimin <bryan@probo.com>
1 parent 1b573ce commit 816f0c9

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

httpserver/httpserver.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ type (
4040
tracerProvider trace.TracerProvider
4141
logger *log.Logger
4242
registerer prometheus.Registerer
43+
readTimeout time.Duration
44+
writeTimeout time.Duration
4345
}
4446
)
4547

@@ -66,11 +68,27 @@ func WithRegisterer(r prometheus.Registerer) Option {
6668
}
6769
}
6870

71+
// WithReadTimeout overrides the default 30 s read timeout. Pass 0 to disable.
72+
func WithReadTimeout(d time.Duration) Option {
73+
return func(o *Options) {
74+
o.readTimeout = d
75+
}
76+
}
77+
78+
// WithWriteTimeout overrides the default 30 s write timeout. Pass 0 to disable.
79+
func WithWriteTimeout(d time.Duration) Option {
80+
return func(o *Options) {
81+
o.writeTimeout = d
82+
}
83+
}
84+
6985
func NewServer(addr string, h http.Handler, options ...Option) *http.Server {
7086
opts := &Options{
7187
logger: log.NewLogger(log.WithOutput(io.Discard)),
7288
tracerProvider: otel.GetTracerProvider(),
7389
registerer: prometheus.DefaultRegisterer,
90+
readTimeout: 30 * time.Second,
91+
writeTimeout: 30 * time.Second,
7492
}
7593

7694
for _, o := range options {
@@ -99,6 +117,8 @@ func NewServer(addr string, h http.Handler, options ...Option) *http.Server {
99117
Handler: handler,
100118
ErrorLog: stdlog.New(logger.NewWriter(log.LevelError), "", 0),
101119
ReadHeaderTimeout: 5 * time.Second,
120+
ReadTimeout: opts.readTimeout,
121+
WriteTimeout: opts.writeTimeout,
102122
IdleTimeout: 15 * time.Second,
103123
ConnContext: func(ctx context.Context, c net.Conn) context.Context {
104124
ctx, span := tracer.Start(ctx, "http.connection",

0 commit comments

Comments
 (0)