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+
6985func 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