diff --git a/sdsConfig.json b/sdsConfig.json index 6dc5e91..b8600ea 100644 --- a/sdsConfig.json +++ b/sdsConfig.json @@ -2,6 +2,8 @@ "cacheLocation": "./sdscache/", "cacheMaxBytes": 100000000, "checkCacheEvery": 60, + "read_timeout": 300, + "write_timeout": 300, "locationDetails": [ { "location": "", diff --git a/sds_types.go b/sds_types.go index 2b60822..7af0509 100644 --- a/sds_types.go +++ b/sds_types.go @@ -126,6 +126,8 @@ type Location struct { // Configuration Struct for Configuraion File type Configuration struct { Port int `json:"port"` + ReadTimeout int `json:"read_timeout"` + WriteTimeout int `json:"write_timeout"` CacheLocation string `json:"cacheLocation"` Logfile string `json:"logfile"` CacheMaxBytes int64 `json:"cacheMaxBytes"` diff --git a/sigplot_data_service.go b/sigplot_data_service.go index 8bf2887..9d4b6e6 100644 --- a/sigplot_data_service.go +++ b/sigplot_data_service.go @@ -2233,10 +2233,22 @@ func main() { msg := ":%d" bindAddr := fmt.Sprintf(msg, configuration.Port) + // Set sane defaults if ReadTimeout and WriteTimeout are not set. + // Recall: if they aren't set, they'll default to 0. + readTimeout := configuration.ReadTimeout + if readTimeout == 0 { + readTimeout = 240 + } + + writeTimeout := configuration.WriteTimeout + if writeTimeout == 0 { + writeTimeout = 30 + } + svr := &http.Server{ Addr: bindAddr, - ReadTimeout: 240 * time.Second, - WriteTimeout: 30 * time.Second, + ReadTimeout: time.Duration(readTimeout) * time.Second, + WriteTimeout: time.Duration(writeTimeout) * time.Second, MaxHeaderBytes: 1 << 20, } log.Fatal(svr.ListenAndServe())