@@ -10,6 +10,7 @@ import (
10
10
"fmt"
11
11
"log"
12
12
"net"
13
+ "time"
13
14
14
15
"inet.af/tcpproxy"
15
16
@@ -27,6 +28,10 @@ import (
27
28
type TCP struct {
28
29
tcpproxy.Proxy
29
30
31
+ DialTimeout time.Duration
32
+ KeepAlivePeriod time.Duration
33
+ TCPUserTimeout time.Duration
34
+
30
35
Logger * log.Logger
31
36
32
37
routes map [string ]* upstream.List
@@ -51,8 +56,11 @@ func (upstream lbUpstream) HealthCheck(ctx context.Context) error {
51
56
}
52
57
53
58
type lbTarget struct {
54
- list * upstream.List
55
- logger * log.Logger
59
+ list * upstream.List
60
+ logger * log.Logger
61
+ dialTimeout time.Duration
62
+ keepAlivePeriod time.Duration
63
+ tcpUserTimeout time.Duration
56
64
}
57
65
58
66
func (target * lbTarget ) HandleConn (conn net.Conn ) {
@@ -69,6 +77,9 @@ func (target *lbTarget) HandleConn(conn net.Conn) {
69
77
target .logger .Printf ("proxying connection %s -> %s" , conn .RemoteAddr (), upstream .upstream )
70
78
71
79
upstreamTarget := tcpproxy .To (upstream .upstream )
80
+ upstreamTarget .DialTimeout = target .dialTimeout
81
+ upstreamTarget .KeepAlivePeriod = target .keepAlivePeriod
82
+ upstreamTarget .TCPUserTimeout = target .tcpUserTimeout
72
83
upstreamTarget .OnDialError = func (src net.Conn , dstDialErr error ) {
73
84
src .Close () //nolint: errcheck
74
85
@@ -78,6 +89,8 @@ func (target *lbTarget) HandleConn(conn net.Conn) {
78
89
}
79
90
80
91
upstreamTarget .HandleConn (conn )
92
+
93
+ target .logger .Printf ("closing connection %s -> %s" , conn .RemoteAddr (), upstream .upstream )
81
94
}
82
95
83
96
// AddRoute installs load balancer route from listen address ipAddr to list of upstreams.
@@ -109,8 +122,11 @@ func (t *TCP) AddRoute(ipPort string, upstreamAddrs []string, options ...upstrea
109
122
t .routes [ipPort ] = list
110
123
111
124
t .Proxy .AddRoute (ipPort , & lbTarget {
112
- list : list ,
113
- logger : t .Logger ,
125
+ list : list ,
126
+ logger : t .Logger ,
127
+ dialTimeout : t .DialTimeout ,
128
+ keepAlivePeriod : t .KeepAlivePeriod ,
129
+ tcpUserTimeout : t .TCPUserTimeout ,
114
130
})
115
131
116
132
return nil
0 commit comments