From 1c2ad64000267ec403f22e1bf94c12ec501bf166 Mon Sep 17 00:00:00 2001 From: nadoo <287492+nadoo@users.noreply.github.com> Date: Wed, 29 Aug 2018 23:54:00 +0800 Subject: [PATCH] strategy: when no forwarders, available set priority to 0 --- strategy/strategy.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/strategy/strategy.go b/strategy/strategy.go index 3fa9439..672ddf3 100644 --- a/strategy/strategy.go +++ b/strategy/strategy.go @@ -155,6 +155,8 @@ func (d *Dialer) initAvailable() { } if len(d.available) == 0 { + // no available forwarders, set priority to 0 to check all forwarders in check func + d.SetPriority(0) log.F("[strategy] no available forwarders, just use: %s, please check your settings or network", d.fwdrs[0]) d.available = append(d.available, d.fwdrs[0]) } @@ -202,15 +204,16 @@ func (d *Dialer) check(i int) { for { time.Sleep(time.Duration(d.config.CheckInterval) * time.Second * time.Duration(retry>>1)) + // check all forwarders at least one time + if retry > 1 && f.Priority() < d.Priority() { + continue + } + retry <<= 1 if retry > 16 { retry = 16 } - if f.Priority() < d.Priority() { - continue - } - startTime := time.Now() rc, err := f.Dial("tcp", d.config.CheckWebSite) if err != nil {