diff --git a/config/config.go b/config/config.go index 61b344d..a61ebaf 100644 --- a/config/config.go +++ b/config/config.go @@ -24,6 +24,8 @@ import ( "github.com/yunify/qingcloud-sdk-go/logger" "github.com/yunify/qingcloud-sdk-go/utils" + "time" + "net" ) // A Config stores a configuration of this sdk. @@ -36,6 +38,7 @@ type Config struct { Protocol string `yaml:"protocol"` URI string `yaml:"uri"` ConnectionRetries int `yaml:"connection_retries"` + ConnectionTimeout int `yaml:"connection_timeout"` LogLevel string `yaml:"log_level"` @@ -66,7 +69,16 @@ func NewDefault() (*Config, error) { if err != nil { return nil, err } - config.Connection = &http.Client{} + + timeout := time.Duration(config.ConnectionTimeout) * time.Second + transport := &http.Transport{ + Dial: func (network, addr string) (net.Conn, error) { + return net.DialTimeout(network, addr, timeout) + }, + } + config.Connection = &http.Client{ + Transport:transport, + } return config, nil } @@ -126,5 +138,15 @@ func (c *Config) LoadConfigFromContent(content []byte) error { logger.SetLevel(c.LogLevel) + timeout := time.Duration(c.ConnectionTimeout) * time.Second + transport := &http.Transport{ + Dial: func (network, addr string) (net.Conn, error) { + return net.DialTimeout(network, addr, timeout) + }, + } + c.Connection = &http.Client{ + Transport:transport, + } + return nil -} +} \ No newline at end of file diff --git a/config/contract.go b/config/contract.go index 4fec35d..01bb356 100644 --- a/config/contract.go +++ b/config/contract.go @@ -35,6 +35,7 @@ port: 443 protocol: 'https' uri: '/iaas' connection_retries: 3 +connection_timeout: 30 # Valid log levels are "debug", "info", "warn", "error", and "fatal". log_level: 'warn'