strategy: avoid returning nil dialer in lha.nextDialer

This commit is contained in:
nadoo 2018-08-16 00:01:59 +08:00
parent 39ccbc5adf
commit 88ff8997b5
3 changed files with 10 additions and 10 deletions

View File

@ -215,9 +215,9 @@ Available forward strategies:
ha: High Availability mode ha: High Availability mode
lha: Latency based High Availability mode lha: Latency based High Availability mode
Forwarder option scheme: FORWARD_URL[#OPTIONS] Forwarder option scheme: FORWARD_URL#OPTIONS
Available options for forwarders: priority: set the priority of that forwarder, default:0
priority: set the priority of that forwarder, default:0 -
Examples: Examples:
socks5://1.1.1.1:1080#priority=100 socks5://1.1.1.1:1080#priority=100
vmess://[security:]uuid@host:port?alterID=num#priority=200 vmess://[security:]uuid@host:port?alterID=num#priority=200

View File

@ -193,7 +193,8 @@ func usage() {
fmt.Fprintf(os.Stderr, "Forwarder option scheme: FORWARD_URL#OPTIONS\n") fmt.Fprintf(os.Stderr, "Forwarder option scheme: FORWARD_URL#OPTIONS\n")
fmt.Fprintf(os.Stderr, " priority: set the priority of that forwarder, default:0\n") fmt.Fprintf(os.Stderr, " priority: set the priority of that forwarder, default:0\n")
fmt.Fprintf(os.Stderr, " e.g.:\n") fmt.Fprintf(os.Stderr, " -\n")
fmt.Fprintf(os.Stderr, " Examples:\n")
fmt.Fprintf(os.Stderr, " socks5://1.1.1.1:1080#priority=100\n") fmt.Fprintf(os.Stderr, " socks5://1.1.1.1:1080#priority=100\n")
fmt.Fprintf(os.Stderr, " vmess://[security:]uuid@host:port?alterID=num#priority=200\n") fmt.Fprintf(os.Stderr, " vmess://[security:]uuid@host:port?alterID=num#priority=200\n")
fmt.Fprintf(os.Stderr, "\n") fmt.Fprintf(os.Stderr, "\n")

View File

@ -248,24 +248,23 @@ func newLHADialer(dialers []*proxy.Forwarder, webhost string, duration int) prox
func (lha *lhaDialer) nextDialer(dstAddr string) *proxy.Forwarder { func (lha *lhaDialer) nextDialer(dstAddr string) *proxy.Forwarder {
var latency int64 var latency int64
var d *proxy.Forwarder for i, fwder := range lha.fwdrs {
for _, fwder := range lha.fwdrs {
if fwder.Enabled() { if fwder.Enabled() {
lha.priority = fwder.Priority lha.priority = fwder.Priority
latency = fwder.Latency() latency = fwder.Latency()
d = fwder lha.idx = i
break break
} }
} }
for _, fwder := range lha.fwdrs { for i, fwder := range lha.fwdrs {
if fwder.Enabled() && fwder.Priority >= lha.priority && fwder.Latency() < latency { if fwder.Enabled() && fwder.Priority >= lha.priority && fwder.Latency() < latency {
latency = fwder.Latency() latency = fwder.Latency()
d = fwder lha.idx = i
} }
} }
return d return lha.fwdrs[lha.idx]
} }
func (lha *lhaDialer) Dial(network, addr string) (net.Conn, error) { func (lha *lhaDialer) Dial(network, addr string) (net.Conn, error) {