@@ -15,6 +15,11 @@ import (
1515 "github.com/gorilla/mux"
1616)
1717
18+ const (
19+ cDefaultReadTimeout = 10 * time .Second
20+ cDefaultWriteTimeout = 10 * time .Second
21+ )
22+
1823// ErrorWithCode contains a message and code, which will be used as a http response code.
1924type ErrorWithCode struct {
2025 code int
@@ -60,9 +65,10 @@ type PathInfo struct {
6065
6166// Config used to pass settings and handlers to the server.
6267type Config struct {
63- Addr string
64- Prefix string
65- Handlers []PathInfo
68+ Addr string
69+ Prefix string
70+ Handlers []PathInfo
71+ ReadTimeout , WriteTimeout time.Duration
6672}
6773
6874// Server is a REST api server.
@@ -82,11 +88,24 @@ func NewServer(cfg *Config) *Server {
8288 router .Handle (s .Path , srv ).Methods (s .Method )
8389 }
8490 s .m .Lock ()
91+
92+ // override timeouts
93+ readTimeout := cDefaultReadTimeout
94+ writeTimeout := cDefaultWriteTimeout
95+
96+ if cfg .ReadTimeout > 0 {
97+ readTimeout = cfg .ReadTimeout
98+ }
99+
100+ if cfg .WriteTimeout > 0 {
101+ writeTimeout = cfg .WriteTimeout
102+ }
103+
85104 s .server = & http.Server {
86105 Addr : s .cfg .Addr ,
87106 Handler : r ,
88- ReadTimeout : 10 * time . Second ,
89- WriteTimeout : 10 * time . Second ,
107+ ReadTimeout : readTimeout ,
108+ WriteTimeout : writeTimeout ,
90109 MaxHeaderBytes : 1 << 20 ,
91110 }
92111 s .m .Unlock ()
0 commit comments