From 3fd89288fb5ccc54ad1b188f05f116dfb61e6a1c Mon Sep 17 00:00:00 2001 From: patterniha <71074308+patterniha@users.noreply.github.com> Date: Sat, 7 Jun 2025 15:08:03 +0330 Subject: [PATCH] set "happy-eyeballs" disabled by default --- infra/conf/transport_internet.go | 4 ++-- infra/conf/transport_test.go | 14 +++++++------- transport/internet/dialer.go | 2 +- transport/internet/happy_eyeballs.go | 14 ++++---------- 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/infra/conf/transport_internet.go b/infra/conf/transport_internet.go index 656f0749..1a4175d8 100644 --- a/infra/conf/transport_internet.go +++ b/infra/conf/transport_internet.go @@ -712,7 +712,7 @@ func (h *HappyEyeballsConfig) UnmarshalJSON(data []byte) error { TryDelayMs uint64 `json:"tryDelayMs"` Interleave uint32 `json:"interleave"` MaxConcurrentTry uint32 `json:"maxConcurrentTry"` - }{PrioritizeIPv6: false, Interleave: 1, TryDelayMs: 250, MaxConcurrentTry: 4} + }{PrioritizeIPv6: false, Interleave: 1, TryDelayMs: 0, MaxConcurrentTry: 4} if err := json.Unmarshal(data, &innerHappyEyeballsConfig); err != nil { return err } @@ -834,7 +834,7 @@ func (c *SocketConfig) Build() (*internet.SocketConfig, error) { return nil, errors.New("unsupported address and port strategy: ", c.AddressPortStrategy) } - var happyEyeballs = &internet.HappyEyeballsConfig{Interleave: 1, PrioritizeIpv6: false, TryDelayMs: 250, MaxConcurrentTry: 4} + var happyEyeballs = &internet.HappyEyeballsConfig{Interleave: 1, PrioritizeIpv6: false, TryDelayMs: 0, MaxConcurrentTry: 4} if c.HappyEyeballsSettings != nil { happyEyeballs.PrioritizeIpv6 = c.HappyEyeballsSettings.PrioritizeIPv6 happyEyeballs.Interleave = c.HappyEyeballsSettings.Interleave diff --git a/infra/conf/transport_test.go b/infra/conf/transport_test.go index 46430c33..87e5f920 100644 --- a/infra/conf/transport_test.go +++ b/infra/conf/transport_test.go @@ -26,7 +26,7 @@ func TestSocketConfig(t *testing.T) { Tfo: 256, DomainStrategy: internet.DomainStrategy_USE_IP, DialerProxy: "tag", - HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 250, PrioritizeIpv6: false, MaxConcurrentTry: 4}, + HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 0, PrioritizeIpv6: false, MaxConcurrentTry: 4}, } runMultiTestCase(t, []TestCase{ { @@ -48,7 +48,7 @@ func TestSocketConfig(t *testing.T) { expectedOutput = &internet.SocketConfig{ Mark: 0, Tfo: -1, - HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 250, PrioritizeIpv6: false, MaxConcurrentTry: 4}, + HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 0, PrioritizeIpv6: false, MaxConcurrentTry: 4}, } runMultiTestCase(t, []TestCase{ { @@ -67,7 +67,7 @@ func TestSocketConfig(t *testing.T) { expectedOutput = &internet.SocketConfig{ Mark: 0, Tfo: 65535, - HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 250, PrioritizeIpv6: false, MaxConcurrentTry: 4}, + HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 0, PrioritizeIpv6: false, MaxConcurrentTry: 4}, } runMultiTestCase(t, []TestCase{ { @@ -86,7 +86,7 @@ func TestSocketConfig(t *testing.T) { expectedOutput = &internet.SocketConfig{ Mark: 0, Tfo: -65535, - HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 250, PrioritizeIpv6: false, MaxConcurrentTry: 4}, + HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 0, PrioritizeIpv6: false, MaxConcurrentTry: 4}, } runMultiTestCase(t, []TestCase{ { @@ -105,7 +105,7 @@ func TestSocketConfig(t *testing.T) { expectedOutput = &internet.SocketConfig{ Mark: 0, Tfo: 0, - HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 250, PrioritizeIpv6: false, MaxConcurrentTry: 4}, + HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 0, PrioritizeIpv6: false, MaxConcurrentTry: 4}, } runMultiTestCase(t, []TestCase{ { @@ -124,7 +124,7 @@ func TestSocketConfig(t *testing.T) { expectedOutput = &internet.SocketConfig{ Mark: 0, Tfo: 0, - HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 250, PrioritizeIpv6: false, MaxConcurrentTry: 4}, + HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 0, PrioritizeIpv6: false, MaxConcurrentTry: 4}, } runMultiTestCase(t, []TestCase{ { @@ -141,7 +141,7 @@ func TestSocketConfig(t *testing.T) { expectedOutput = &internet.SocketConfig{ Mark: 0, Tfo: 0, - HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 250, PrioritizeIpv6: false, MaxConcurrentTry: 4}, + HappyEyeballs: &internet.HappyEyeballsConfig{Interleave: 1, TryDelayMs: 0, PrioritizeIpv6: false, MaxConcurrentTry: 4}, } runMultiTestCase(t, []TestCase{ { diff --git a/transport/internet/dialer.go b/transport/internet/dialer.go index 30eda294..5e403f67 100644 --- a/transport/internet/dialer.go +++ b/transport/internet/dialer.go @@ -255,7 +255,7 @@ func DialSystem(ctx context.Context, dest net.Destination, sockopt *SocketConfig if sockopt.DomainStrategy.forceIP() { return nil, err } - } else if (sockopt.HappyEyeballs != nil && (sockopt.HappyEyeballs.TryDelayMs == 0 || sockopt.HappyEyeballs.MaxConcurrentTry == 0)) || len(ips) < 2 || len(sockopt.DialerProxy) > 0 || dest.Network != net.Network_TCP { + } else if sockopt.HappyEyeballs == nil || sockopt.HappyEyeballs.TryDelayMs == 0 || sockopt.HappyEyeballs.MaxConcurrentTry == 0 || len(ips) < 2 || len(sockopt.DialerProxy) > 0 || dest.Network != net.Network_TCP { dest.Address = net.IPAddress(ips[dice.Roll(len(ips))]) errors.LogInfo(ctx, "replace destination with "+dest.String()) } else { diff --git a/transport/internet/happy_eyeballs.go b/transport/internet/happy_eyeballs.go index 03bafb39..10adb235 100644 --- a/transport/internet/happy_eyeballs.go +++ b/transport/internet/happy_eyeballs.go @@ -17,16 +17,10 @@ func TcpRaceDial(ctx context.Context, src net.Address, ips []net.IP, port net.Po panic("at least 2 ips is required to race dial") } - prioritizeIPv6 := false - interleave := uint32(1) - tryDelayMs := 250 * time.Millisecond - maxConcurrentTry := uint32(4) - if sockopt.HappyEyeballs != nil { - prioritizeIPv6 = sockopt.HappyEyeballs.PrioritizeIpv6 - interleave = sockopt.HappyEyeballs.Interleave - tryDelayMs = time.Duration(sockopt.HappyEyeballs.TryDelayMs) * time.Millisecond - maxConcurrentTry = sockopt.HappyEyeballs.MaxConcurrentTry - } + prioritizeIPv6 := sockopt.HappyEyeballs.PrioritizeIpv6 + interleave := sockopt.HappyEyeballs.Interleave + tryDelayMs := time.Duration(sockopt.HappyEyeballs.TryDelayMs) * time.Millisecond + maxConcurrentTry := sockopt.HappyEyeballs.MaxConcurrentTry ips = sortIPs(ips, prioritizeIPv6, interleave) newCtx, cancel := context.WithCancel(ctx)