mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 09:25:41 +08:00
fixed a bug in proxy check which may leads to socket error: too many open files.
This commit is contained in:
parent
4772bfb7c6
commit
c79a9ee36d
36
main.go
36
main.go
@ -124,33 +124,25 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var forwarders []Proxy
|
var forwarders []Proxy
|
||||||
if len(flags.Forward) > 0 {
|
for _, chain := range flags.Forward {
|
||||||
|
var forward Proxy
|
||||||
var err error
|
var err error
|
||||||
for _, chain := range flags.Forward {
|
for _, url := range strings.Split(chain, ",") {
|
||||||
var forward Proxy
|
forward, err = ProxyFromURL(url, forward)
|
||||||
for _, url := range strings.Split(chain, ",") {
|
|
||||||
forward, err = ProxyFromURL(url, forward)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
forwarders = append(forwarders, forward)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, forward := range forwarders {
|
|
||||||
go check(forward, config.CheckSite, config.CheckDuration)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(flags.Listen) > 0 {
|
|
||||||
for _, listen := range flags.Listen {
|
|
||||||
local, err := ProxyFromURL(listen, forwarders...)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
go local.ListenAndServe()
|
|
||||||
}
|
}
|
||||||
|
forwarders = append(forwarders, forward)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, listen := range flags.Listen {
|
||||||
|
local, err := ProxyFromURL(listen, forwarders...)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
go local.ListenAndServe()
|
||||||
}
|
}
|
||||||
|
|
||||||
sigCh := make(chan os.Signal, 1)
|
sigCh := make(chan os.Signal, 1)
|
||||||
|
4
proxy.go
4
proxy.go
@ -88,7 +88,7 @@ func ProxyFromURL(s string, forwarders ...Proxy) (Proxy, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var proxy Proxy
|
var proxy Proxy
|
||||||
if forwarders == nil || len(forwarders) == 0 {
|
if len(forwarders) == 0 {
|
||||||
proxy = newProxy(addr, Direct)
|
proxy = newProxy(addr, Direct)
|
||||||
} else if len(forwarders) == 1 {
|
} else if len(forwarders) == 1 {
|
||||||
proxy = newProxy(addr, forwarders[0])
|
proxy = newProxy(addr, forwarders[0])
|
||||||
@ -144,7 +144,7 @@ func check(p Proxy, target string, duration int) {
|
|||||||
p.SetEnable(false)
|
p.SetEnable(false)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
defer c.Close()
|
c.Close()
|
||||||
|
|
||||||
p.SetEnable(true)
|
p.SetEnable(true)
|
||||||
logf("proxy %s check ok.", p.Addr())
|
logf("proxy %s check ok.", p.Addr())
|
||||||
|
2
redir.go
2
redir.go
@ -64,8 +64,6 @@ func (s *redir) ListenAndServe() {
|
|||||||
defer rc.Close()
|
defer rc.Close()
|
||||||
|
|
||||||
logf("proxy-redir %s <-> %s", c.RemoteAddr(), tgt)
|
logf("proxy-redir %s <-> %s", c.RemoteAddr(), tgt)
|
||||||
// go io.Copy(rc, c)
|
|
||||||
// io.Copy(c, rc)
|
|
||||||
|
|
||||||
_, _, err = relay(c, rc)
|
_, _, err = relay(c, rc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -20,6 +20,10 @@ func newStrategyProxy(addr string, forwarders []Proxy) Proxy {
|
|||||||
return newProxy(addr, forwarders[0])
|
return newProxy(addr, forwarders[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, forward := range forwarders {
|
||||||
|
go check(forward, config.CheckSite, config.CheckDuration)
|
||||||
|
}
|
||||||
|
|
||||||
return &strategyProxy{addr: addr, forwarders: forwarders}
|
return &strategyProxy{addr: addr, forwarders: forwarders}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user