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