strategy: when no forwarders, available set priority to 0

This commit is contained in:
nadoo 2018-08-29 23:54:00 +08:00
parent ac94540ab8
commit 1c2ad64000

View File

@ -155,6 +155,8 @@ func (d *Dialer) initAvailable() {
} }
if len(d.available) == 0 { 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]) 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]) d.available = append(d.available, d.fwdrs[0])
} }
@ -202,15 +204,16 @@ func (d *Dialer) check(i int) {
for { for {
time.Sleep(time.Duration(d.config.CheckInterval) * time.Second * time.Duration(retry>>1)) 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 retry <<= 1
if retry > 16 { if retry > 16 {
retry = 16 retry = 16
} }
if f.Priority() < d.Priority() {
continue
}
startTime := time.Now() startTime := time.Now()
rc, err := f.Dial("tcp", d.config.CheckWebSite) rc, err := f.Dial("tcp", d.config.CheckWebSite)
if err != nil { if err != nil {