@@ -17,7 +17,6 @@ package client
17
17
import (
18
18
"context"
19
19
"crypto/tls"
20
- "errors"
21
20
"fmt"
22
21
"io"
23
22
"net"
@@ -34,6 +33,7 @@ import (
34
33
"github.com/fatedier/frp/pkg/transport"
35
34
"github.com/fatedier/frp/pkg/util/log"
36
35
frpNet "github.com/fatedier/frp/pkg/util/net"
36
+ "github.com/fatedier/frp/pkg/util/util"
37
37
"github.com/fatedier/frp/pkg/util/version"
38
38
"github.com/fatedier/frp/pkg/util/xlog"
39
39
libdial "github.com/fatedier/golib/net/dial"
@@ -109,7 +109,7 @@ func (svr *Service) Run() error {
109
109
if svr .cfg .LoginFailExit {
110
110
return err
111
111
}
112
- time . Sleep (10 * time .Second )
112
+ util . RandomSleep (10 * time .Second , 0.9 , 1.1 )
113
113
} else {
114
114
// login success
115
115
ctl := NewControl (svr .ctx , svr .runID , conn , session , svr .cfg , svr .pxyCfgs , svr .visitorCfgs , svr .serverUDPPort , svr .authSetter )
@@ -158,8 +158,11 @@ func (svr *Service) keepControllerWorking() {
158
158
159
159
// the first three retry with no delay
160
160
if reconnectCounts > 3 {
161
- time .Sleep (reconnectDelay )
161
+ util .RandomSleep (reconnectDelay , 0.9 , 1.1 )
162
+ xl .Info ("wait %v to reconnect" , reconnectDelay )
162
163
reconnectDelay *= 2
164
+ } else {
165
+ util .RandomSleep (time .Second , 0 , 0.5 )
163
166
}
164
167
reconnectCounts ++
165
168
@@ -175,18 +178,12 @@ func (svr *Service) keepControllerWorking() {
175
178
xl .Info ("try to reconnect to server..." )
176
179
conn , session , err := svr .login ()
177
180
if err != nil {
178
- xl .Warn ("reconnect to server error: %v" , err )
179
- time .Sleep (delayTime )
180
-
181
- opErr := & net.OpError {}
182
- // quick retry for dial error
183
- if errors .As (err , & opErr ) && opErr .Op == "dial" {
184
- delayTime = 2 * time .Second
185
- } else {
186
- delayTime = delayTime * 2
187
- if delayTime > maxDelayTime {
188
- delayTime = maxDelayTime
189
- }
181
+ xl .Warn ("reconnect to server error: %v, wait %v for another retry" , err , delayTime )
182
+ util .RandomSleep (delayTime , 0.9 , 1.1 )
183
+
184
+ delayTime = delayTime * 2
185
+ if delayTime > maxDelayTime {
186
+ delayTime = maxDelayTime
190
187
}
191
188
continue
192
189
}
@@ -245,6 +242,7 @@ func (svr *Service) login() (conn net.Conn, session *fmux.Session, err error) {
245
242
}
246
243
dialOptions = append (dialOptions ,
247
244
libdial .WithProtocol (protocol ),
245
+ libdial .WithTimeout (time .Duration (svr .cfg .DialServerTimeout )* time .Second ),
248
246
libdial .WithProxy (proxyType , addr ),
249
247
libdial .WithProxyAuth (auth ),
250
248
libdial .WithTLSConfig (tlsConfig ),
0 commit comments