runtime.go raw

   1  package utils
   2  
   3  import (
   4  	"context"
   5  	"net"
   6  	"time"
   7  )
   8  
   9  // Runtime is for setting timeout, proxy and host
  10  type Runtime struct {
  11  	ReadTimeout    int
  12  	ConnectTimeout int
  13  	Proxy          string
  14  	Host           string
  15  	STSEndpoint    string
  16  }
  17  
  18  // NewRuntime returns a Runtime
  19  func NewRuntime(readTimeout, connectTimeout int, proxy string, host string) *Runtime {
  20  	return &Runtime{
  21  		ReadTimeout:    readTimeout,
  22  		ConnectTimeout: connectTimeout,
  23  		Proxy:          proxy,
  24  		Host:           host,
  25  	}
  26  }
  27  
  28  // Timeout is for connect Timeout
  29  func Timeout(connectTimeout time.Duration) func(cxt context.Context, net, addr string) (c net.Conn, err error) {
  30  	return func(ctx context.Context, network, address string) (net.Conn, error) {
  31  		return (&net.Dialer{
  32  			Timeout:   connectTimeout,
  33  			DualStack: true,
  34  		}).DialContext(ctx, network, address)
  35  	}
  36  }
  37