diff --git a/component/dialer/dialer.go b/component/dialer/dialer.go index 985e2195..070d98b8 100644 --- a/component/dialer/dialer.go +++ b/component/dialer/dialer.go @@ -15,6 +15,11 @@ import ( "github.com/metacubex/mihomo/constant/features" ) +const ( + DefaultTCPTimeout = 5 * time.Second + DefaultUDPTimeout = DefaultTCPTimeout +) + type dialFunc func(ctx context.Context, network string, ips []netip.Addr, port string, opt *option) (net.Conn, error) var ( diff --git a/component/dialer/tfo.go b/component/dialer/tfo.go index 4863d6ae..950bdfe4 100644 --- a/component/dialer/tfo.go +++ b/component/dialer/tfo.go @@ -2,10 +2,11 @@ package dialer import ( "context" - "github.com/sagernet/tfo-go" "io" "net" "time" + + "github.com/sagernet/tfo-go" ) type tfoConn struct { @@ -66,14 +67,14 @@ func (c *tfoConn) Close() error { func (c *tfoConn) LocalAddr() net.Addr { if c.Conn == nil { - return nil + return &net.TCPAddr{} } return c.Conn.LocalAddr() } func (c *tfoConn) RemoteAddr() net.Addr { if c.Conn == nil { - return nil + return &net.TCPAddr{} } return c.Conn.RemoteAddr() } @@ -123,7 +124,7 @@ func (c *tfoConn) WriterReplaceable() bool { } func dialTFO(ctx context.Context, netDialer net.Dialer, network, address string) (net.Conn, error) { - ctx, cancel := context.WithCancel(ctx) + ctx, cancel := context.WithTimeout(context.Background(), DefaultTCPTimeout) dialer := tfo.Dialer{Dialer: netDialer, DisableTFO: false} return &tfoConn{ dialed: make(chan bool, 1), diff --git a/constant/adapters.go b/constant/adapters.go index 9752de55..83c8223a 100644 --- a/constant/adapters.go +++ b/constant/adapters.go @@ -43,9 +43,9 @@ const ( ) const ( - DefaultTCPTimeout = 5 * time.Second + DefaultTCPTimeout = dialer.DefaultTCPTimeout + DefaultUDPTimeout = dialer.DefaultUDPTimeout DefaultDropTime = 12 * DefaultTCPTimeout - DefaultUDPTimeout = DefaultTCPTimeout DefaultTLSTimeout = DefaultTCPTimeout DefaultTestURL = "https://www.gstatic.com/generate_204" )