mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 01:15: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
|
||||
if len(flags.Forward) > 0 {
|
||||
for _, chain := range flags.Forward {
|
||||
var forward Proxy
|
||||
var err error
|
||||
for _, chain := range flags.Forward {
|
||||
var forward Proxy
|
||||
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...)
|
||||
for _, url := range strings.Split(chain, ",") {
|
||||
forward, err = ProxyFromURL(url, forward)
|
||||
if err != nil {
|
||||
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)
|
||||
|
4
proxy.go
4
proxy.go
@ -88,7 +88,7 @@ func ProxyFromURL(s string, forwarders ...Proxy) (Proxy, error) {
|
||||
}
|
||||
|
||||
var proxy Proxy
|
||||
if forwarders == nil || len(forwarders) == 0 {
|
||||
if len(forwarders) == 0 {
|
||||
proxy = newProxy(addr, Direct)
|
||||
} else if len(forwarders) == 1 {
|
||||
proxy = newProxy(addr, forwarders[0])
|
||||
@ -144,7 +144,7 @@ func check(p Proxy, target string, duration int) {
|
||||
p.SetEnable(false)
|
||||
continue
|
||||
}
|
||||
defer c.Close()
|
||||
c.Close()
|
||||
|
||||
p.SetEnable(true)
|
||||
logf("proxy %s check ok.", p.Addr())
|
||||
|
2
redir.go
2
redir.go
@ -64,8 +64,6 @@ func (s *redir) ListenAndServe() {
|
||||
defer rc.Close()
|
||||
|
||||
logf("proxy-redir %s <-> %s", c.RemoteAddr(), tgt)
|
||||
// go io.Copy(rc, c)
|
||||
// io.Copy(c, rc)
|
||||
|
||||
_, _, err = relay(c, rc)
|
||||
if err != nil {
|
||||
|
@ -20,6 +20,10 @@ func newStrategyProxy(addr string, forwarders []Proxy) Proxy {
|
||||
return newProxy(addr, forwarders[0])
|
||||
}
|
||||
|
||||
for _, forward := range forwarders {
|
||||
go check(forward, config.CheckSite, config.CheckDuration)
|
||||
}
|
||||
|
||||
return &strategyProxy{addr: addr, forwarders: forwarders}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user