diff --git a/adapter/adapter.go b/adapter/adapter.go index 76bbe2e3d..0b10fae74 100644 --- a/adapter/adapter.go +++ b/adapter/adapter.go @@ -16,6 +16,8 @@ import ( "go.uber.org/atomic" ) +var UnifiedDelay = atomic.NewBool(false) + type Proxy struct { C.ProxyAdapter history *queue.Queue @@ -114,6 +116,8 @@ func (p *Proxy) URLTest(ctx context.Context, url string) (t uint16, err error) { } }() + unifiedDelay := UnifiedDelay.Load() + addr, err := urlToMetadata(url) if err != nil { return @@ -150,11 +154,19 @@ func (p *Proxy) URLTest(ctx context.Context, url string) (t uint16, err error) { }, } defer client.CloseIdleConnections() - resp, err := client.Do(req) if err != nil { return } + + if unifiedDelay { + start = time.Now() + resp, err = client.Do(req) + if err != nil { + return + } + } + resp.Body.Close() t = uint16(time.Since(start) / time.Millisecond) return diff --git a/config/config.go b/config/config.go index 3218bdb56..d9dcf9feb 100644 --- a/config/config.go +++ b/config/config.go @@ -34,10 +34,11 @@ import ( type General struct { Inbound Controller - Mode T.TunnelMode `json:"mode"` - LogLevel log.LogLevel `json:"log-level"` - IPv6 bool `json:"ipv6"` - Interface string `json:"-"` + Mode T.TunnelMode `json:"mode"` + UnifiedDelay bool + LogLevel log.LogLevel `json:"log-level"` + IPv6 bool `json:"ipv6"` + Interface string `json:"-"` } // Inbound @@ -161,6 +162,7 @@ type RawConfig struct { AllowLan bool `yaml:"allow-lan"` BindAddress string `yaml:"bind-address"` Mode T.TunnelMode `yaml:"mode"` + UnifiedDelay bool `yaml:"unified-delay"` LogLevel log.LogLevel `yaml:"log-level"` IPv6 bool `yaml:"ipv6"` ExternalController string `yaml:"external-controller"` @@ -197,6 +199,7 @@ func UnmarshalRawConfig(buf []byte) (*RawConfig, error) { AllowLan: false, BindAddress: "*", Mode: T.Rule, + UnifiedDelay: false, Authentication: []string{}, LogLevel: log.INFO, Hosts: map[string]string{}, @@ -318,10 +321,11 @@ func parseGeneral(cfg *RawConfig) (*General, error) { ExternalUI: cfg.ExternalUI, Secret: cfg.Secret, }, - Mode: cfg.Mode, - LogLevel: cfg.LogLevel, - IPv6: cfg.IPv6, - Interface: cfg.Interface, + UnifiedDelay: cfg.UnifiedDelay, + Mode: cfg.Mode, + LogLevel: cfg.LogLevel, + IPv6: cfg.IPv6, + Interface: cfg.Interface, }, nil } diff --git a/hub/executor/executor.go b/hub/executor/executor.go index 877214d5e..1820decc3 100644 --- a/hub/executor/executor.go +++ b/hub/executor/executor.go @@ -185,6 +185,7 @@ func updateRules(rules []C.Rule, ruleProviders map[string]*provider.RuleProvider func updateGeneral(general *config.General, force bool) { tunnel.SetMode(general.Mode) resolver.DisableIPv6 = !general.IPv6 + adapter.UnifiedDelay.Store(general.UnifiedDelay) if (general.Tun.Enable || general.TProxyPort != 0) && general.Interface == "" { autoDetectInterfaceName, err := dev.GetAutoDetectInterface()