ing
This commit is contained in:
		
							parent
							
								
									0e01920fe9
								
							
						
					
					
						commit
						53a7e28c86
					
				| @ -1,6 +1,7 @@ | |||||||
| package client | package client | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"crypto/tls" | ||||||
| 	"net" | 	"net" | ||||||
| 	"sync" | 	"sync" | ||||||
| 
 | 
 | ||||||
| @ -31,20 +32,30 @@ func NewSocket(sb SocketBuilder, parentContext cuc.Context) (Socket, error) { | |||||||
| 	} | 	} | ||||||
| 	sh.Validate() | 	sh.Validate() | ||||||
| 
 | 
 | ||||||
| 	d := &net.Dialer{} |  | ||||||
| 	d.Timeout = sb.GetTimeout() |  | ||||||
| 	d.KeepAlive = sb.GetKeepAlive() |  | ||||||
| 	d.LocalAddr = sb.GetLocalAddress() |  | ||||||
| 
 |  | ||||||
| 	network := sb.GetNetwork() | 	network := sb.GetNetwork() | ||||||
| 	address := sb.GetAddress() | 	address := sb.GetAddress() | ||||||
| 
 | 
 | ||||||
| 	conn, err := sb.Dial(d, network, address) | 	conn, err := sb.Dial(network, address) | ||||||
| 
 |  | ||||||
| 	if nil != err { | 	if nil != err { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	tlsConfig := sb.GetTLSConfig() | ||||||
|  | 	if nil != tlsConfig { | ||||||
|  | 		cfg := tlsConfig.Clone() | ||||||
|  | 		tlsConn := tls.Client(conn, cfg) | ||||||
|  | 		if err := tlsConn.Handshake(); err != nil { | ||||||
|  | 			tlsConn.Close() | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		if !cfg.InsecureSkipVerify { | ||||||
|  | 			if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { | ||||||
|  | 				return nil, err | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		conn = tlsConn | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	sh.OnConnect(sc, conn) | 	sh.OnConnect(sc, conn) | ||||||
| 
 | 
 | ||||||
| 	s := retainSocket() | 	s := retainSocket() | ||||||
|  | |||||||
| @ -12,14 +12,14 @@ type SocketBuilder interface { | |||||||
| 	SocketContext(parent cuc.Context) SocketContext | 	SocketContext(parent cuc.Context) SocketContext | ||||||
| 	SocketHandler() SocketHandler | 	SocketHandler() SocketHandler | ||||||
| 
 | 
 | ||||||
| 	Dial(dialer *net.Dialer, network, address string) (net.Conn, error) | 	Dial(network, address string) (net.Conn, error) | ||||||
| 
 | 
 | ||||||
| 	GetNetwork() string | 	GetNetwork() string | ||||||
| 	GetAddress() string | 	GetAddress() string | ||||||
| 	GetTLSConfig() *tls.Config | 	GetTLSConfig() *tls.Config | ||||||
| 
 | 
 | ||||||
|  | 	GetHandshakeTimeout() time.Duration | ||||||
| 	GetKeepAlive() time.Duration | 	GetKeepAlive() time.Duration | ||||||
| 	GetTimeout() time.Duration |  | ||||||
| 	GetLocalAddress() net.Addr | 	GetLocalAddress() net.Addr | ||||||
| 
 | 
 | ||||||
| 	// Validate is check handler value | 	// Validate is check handler value | ||||||
|  | |||||||
| @ -15,8 +15,8 @@ type SocketBuilders struct { | |||||||
| 	Address   string | 	Address   string | ||||||
| 	TLSConfig *tls.Config | 	TLSConfig *tls.Config | ||||||
| 
 | 
 | ||||||
| 	KeepAlive time.Duration | 	HandshakeTimeout time.Duration | ||||||
| 	Timeout   time.Duration | 	KeepAlive        time.Duration | ||||||
| 
 | 
 | ||||||
| 	LocalAddress net.Addr | 	LocalAddress net.Addr | ||||||
| } | } | ||||||
| @ -41,20 +41,27 @@ func (sb *SocketBuilders) GetTLSConfig() *tls.Config { | |||||||
| 	return sb.TLSConfig | 	return sb.TLSConfig | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (sb *SocketBuilders) Dial(dialer *net.Dialer, network, address string) (net.Conn, error) { | func (sb *SocketBuilders) Dial(network, address string) (net.Conn, error) { | ||||||
| 	if nil == sb.TLSConfig { | 	var deadline time.Time | ||||||
| 		return dialer.Dial(network, address) | 	if 0 != sb.HandshakeTimeout { | ||||||
|  | 		deadline = time.Now().Add(sb.HandshakeTimeout) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return tls.DialWithDialer(dialer, network, address, sb.TLSConfig) | 	d := &net.Dialer{ | ||||||
|  | 		KeepAlive: sb.KeepAlive, | ||||||
|  | 		Deadline:  deadline, | ||||||
|  | 		LocalAddr: sb.LocalAddress, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return d.Dial(network, address) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (sb *SocketBuilders) GetKeepAlive() time.Duration { | func (sb *SocketBuilders) GetKeepAlive() time.Duration { | ||||||
| 	return sb.KeepAlive | 	return sb.KeepAlive | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (sb *SocketBuilders) GetTimeout() time.Duration { | func (sb *SocketBuilders) GetHandshakeTimeout() time.Duration { | ||||||
| 	return sb.Timeout | 	return sb.HandshakeTimeout | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (sb *SocketBuilders) GetLocalAddress() net.Addr { | func (sb *SocketBuilders) GetLocalAddress() net.Addr { | ||||||
| @ -72,8 +79,8 @@ func (sb *SocketBuilders) Validate() { | |||||||
| 	if 0 >= sb.KeepAlive { | 	if 0 >= sb.KeepAlive { | ||||||
| 		sb.KeepAlive = cs.DefaultKeepAlive | 		sb.KeepAlive = cs.DefaultKeepAlive | ||||||
| 	} | 	} | ||||||
| 	if 0 >= sb.Timeout { | 	if 0 >= sb.HandshakeTimeout { | ||||||
| 		sb.Timeout = cs.DefaultConnectTimeout | 		sb.HandshakeTimeout = cs.DefaultHandshakeTimeout | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ const ( | |||||||
| 	// DefaultWriteTimeout is default value of write timeout | 	// DefaultWriteTimeout is default value of write timeout | ||||||
| 	DefaultWriteTimeout = 0 | 	DefaultWriteTimeout = 0 | ||||||
| 
 | 
 | ||||||
| 	DefaultConnectTimeout = 0 | 	DefaultHandshakeTimeout = 0 | ||||||
| 
 | 
 | ||||||
| 	DefaultKeepAlive = 0 | 	DefaultKeepAlive = 0 | ||||||
| ) | ) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user