From f59e1ad854d28844c4fc97a1ef740dd96d62b773 Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Sat, 30 Jan 2016 01:52:32 +0000 Subject: [PATCH] Use dialer in relay checks (fixes #2732) --- lib/connections/connections_tcp.go | 3 +-- lib/dialer/internal.go | 5 ++--- lib/dialer/public.go | 18 ++++++++++++++++++ lib/osutil/osutil.go | 20 -------------------- lib/osutil/ping.go | 8 +++----- 5 files changed, 24 insertions(+), 30 deletions(-) diff --git a/lib/connections/connections_tcp.go b/lib/connections/connections_tcp.go index 5dce31066..61d872e1b 100644 --- a/lib/connections/connections_tcp.go +++ b/lib/connections/connections_tcp.go @@ -14,7 +14,6 @@ import ( "github.com/syncthing/syncthing/lib/dialer" "github.com/syncthing/syncthing/lib/model" - "github.com/syncthing/syncthing/lib/osutil" ) func init() { @@ -72,7 +71,7 @@ func tcpListener(uri *url.URL, tlsCfg *tls.Config, conns chan<- model.Intermedia l.Debugln("connect from", conn.RemoteAddr()) - err = osutil.SetTCPOptions(conn.(*net.TCPConn)) + err = dialer.SetTCPOptions(conn.(*net.TCPConn)) if err != nil { l.Infoln(err) } diff --git a/lib/dialer/internal.go b/lib/dialer/internal.go index 3948b0e8e..167818738 100644 --- a/lib/dialer/internal.go +++ b/lib/dialer/internal.go @@ -17,7 +17,6 @@ import ( "golang.org/x/net/proxy" "github.com/syncthing/syncthing/lib/logger" - "github.com/syncthing/syncthing/lib/osutil" ) var ( @@ -55,7 +54,7 @@ func dialWithFallback(proxyDialFunc dialFunc, fallbackDialFunc dialFunc, network if err == nil { l.Debugf("Dialing %s address %s via proxy - success, %s -> %s", network, addr, conn.LocalAddr(), conn.RemoteAddr()) if tcpconn, ok := conn.(*net.TCPConn); ok { - osutil.SetTCPOptions(tcpconn) + SetTCPOptions(tcpconn) } return dialerConn{ conn, newDialerAddr(network, addr), @@ -67,7 +66,7 @@ func dialWithFallback(proxyDialFunc dialFunc, fallbackDialFunc dialFunc, network if err == nil { l.Debugf("Dialing %s address %s via fallback - success, %s -> %s", network, addr, conn.LocalAddr(), conn.RemoteAddr()) if tcpconn, ok := conn.(*net.TCPConn); ok { - osutil.SetTCPOptions(tcpconn) + SetTCPOptions(tcpconn) } } else { l.Debugf("Dialing %s address %s via fallback - error %s", network, addr, err) diff --git a/lib/dialer/public.go b/lib/dialer/public.go index 4bf17c5b9..f64ce1969 100644 --- a/lib/dialer/public.go +++ b/lib/dialer/public.go @@ -46,3 +46,21 @@ func DialTimeout(network, addr string, timeout time.Duration) (net.Conn, error) } return net.DialTimeout(network, addr, timeout) } + +// SetTCPOptions sets syncthings default TCP options on a TCP connection +func SetTCPOptions(conn *net.TCPConn) error { + var err error + if err = conn.SetLinger(0); err != nil { + return err + } + if err = conn.SetNoDelay(false); err != nil { + return err + } + if err = conn.SetKeepAlivePeriod(60 * time.Second); err != nil { + return err + } + if err = conn.SetKeepAlive(true); err != nil { + return err + } + return nil +} diff --git a/lib/osutil/osutil.go b/lib/osutil/osutil.go index f4e15885a..64802518e 100644 --- a/lib/osutil/osutil.go +++ b/lib/osutil/osutil.go @@ -11,12 +11,10 @@ import ( "errors" "fmt" "io" - "net" "os" "path/filepath" "runtime" "strings" - "time" "github.com/calmh/du" "github.com/syncthing/syncthing/lib/sync" @@ -223,21 +221,3 @@ func DiskFreePercentage(path string) (freePct float64, err error) { u, err := du.Get(path) return (float64(u.FreeBytes) / float64(u.TotalBytes)) * 100, err } - -// SetTCPOptions sets syncthings default TCP options on a TCP connection -func SetTCPOptions(conn *net.TCPConn) error { - var err error - if err = conn.SetLinger(0); err != nil { - return err - } - if err = conn.SetNoDelay(false); err != nil { - return err - } - if err = conn.SetKeepAlivePeriod(60 * time.Second); err != nil { - return err - } - if err = conn.SetKeepAlive(true); err != nil { - return err - } - return nil -} diff --git a/lib/osutil/ping.go b/lib/osutil/ping.go index 743da5f71..756037fea 100644 --- a/lib/osutil/ping.go +++ b/lib/osutil/ping.go @@ -7,20 +7,18 @@ package osutil import ( - "net" "net/url" "time" + + "github.com/syncthing/syncthing/lib/dialer" ) // TCPPing returns the duration required to establish a TCP connection // to the given host. ICMP packets require root priviledges, hence why we use // tcp. func TCPPing(address string) (time.Duration, error) { - dialer := net.Dialer{ - Deadline: time.Now().Add(time.Second), - } start := time.Now() - conn, err := dialer.Dial("tcp", address) + conn, err := dialer.DialTimeout("tcp", address, time.Second) if conn != nil { conn.Close() }