From 5ebe61905037d060ec21b10c71a6a0b83456113a Mon Sep 17 00:00:00 2001 From: Harry Van Ness Date: Fri, 31 Jan 2025 09:54:51 +1100 Subject: [PATCH 1/2] net: increase network family autoselection timeout to 500ms The current 250ms timeout is too short for high-latency network environments, causing connection failures in IPv4-only networks when connecting to dual-stack hosts. This increases the timeout to 500ms to better handle satellite, cellular, and geographically distant connections. The timeout should be reconsidered when parallel connections are implemented as per RFC 8305. Refs: https://github.com/nodejs/node/issues/54359 Refs: https://github.com/nodejs/node/issues/48145 --- doc/api/net.md | 2 +- src/node_options.h | 2 +- .../test-net-autoselectfamily-attempt-timeout-default-value.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/net.md b/doc/api/net.md index f5226db3b656da..e258b331b383ce 100644 --- a/doc/api/net.md +++ b/doc/api/net.md @@ -1905,7 +1905,7 @@ added: --> Gets the current default value of the `autoSelectFamilyAttemptTimeout` option of [`socket.connect(options)`][]. -The initial default value is `250` or the value specified via the command line +The initial default value is `500` or the value specified via the command line option `--network-family-autoselection-attempt-timeout`. * Returns: {number} The current default value of the `autoSelectFamilyAttemptTimeout` option. diff --git a/src/node_options.h b/src/node_options.h index c9c41ae81b1897..79b90d59014cb9 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -155,7 +155,7 @@ class EnvironmentOptions : public Options { int64_t heap_snapshot_near_heap_limit = 0; std::string heap_snapshot_signal; bool network_family_autoselection = true; - uint64_t network_family_autoselection_attempt_timeout = 250; + uint64_t network_family_autoselection_attempt_timeout = 500; uint64_t max_http_header_size = 16 * 1024; bool deprecation = true; bool force_async_hooks_checks = true; diff --git a/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js b/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js index 782276952708a0..c244c4577d2277 100644 --- a/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js +++ b/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js @@ -5,4 +5,4 @@ const { platformTimeout } = require('../common'); const assert = require('assert'); const { getDefaultAutoSelectFamilyAttemptTimeout } = require('net'); -assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(2500)); +assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(5000)); From 9a169d217d7dfaf297a89f32516d86caccda7ad0 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Tue, 21 Oct 2025 16:03:05 +1100 Subject: [PATCH 2/2] fixup! net: increase network family autoselection timeout to 500ms --- test/common/index.js | 5 +++-- .../test-net-autoselectfamily-attempt-timeout-cli-option.js | 2 +- ...est-net-autoselectfamily-attempt-timeout-default-value.js | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/test/common/index.js b/test/common/index.js index 83166076e16405..268b48663b4f66 100755 --- a/test/common/index.js +++ b/test/common/index.js @@ -176,8 +176,9 @@ function isPi() { } } -// When using high concurrency or in the CI we need much more time for each connection attempt -net.setDefaultAutoSelectFamilyAttemptTimeout(platformTimeout(net.getDefaultAutoSelectFamilyAttemptTimeout() * 10)); +// When using high concurrency or in the CI we need much more time for each connection attempt. +// Default 500ms becomes 2500ms for tests. +net.setDefaultAutoSelectFamilyAttemptTimeout(platformTimeout(net.getDefaultAutoSelectFamilyAttemptTimeout() * 5)); const defaultAutoSelectFamilyAttemptTimeout = net.getDefaultAutoSelectFamilyAttemptTimeout(); const buildType = process.config.target_defaults ? diff --git a/test/parallel/test-net-autoselectfamily-attempt-timeout-cli-option.js b/test/parallel/test-net-autoselectfamily-attempt-timeout-cli-option.js index 474ffe024cd549..cf177e968ce7da 100644 --- a/test/parallel/test-net-autoselectfamily-attempt-timeout-cli-option.js +++ b/test/parallel/test-net-autoselectfamily-attempt-timeout-cli-option.js @@ -7,4 +7,4 @@ const { platformTimeout } = require('../common'); const assert = require('assert'); const { getDefaultAutoSelectFamilyAttemptTimeout } = require('net'); -assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(123 * 10)); +assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(123 * 5)); diff --git a/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js b/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js index c244c4577d2277..782276952708a0 100644 --- a/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js +++ b/test/parallel/test-net-autoselectfamily-attempt-timeout-default-value.js @@ -5,4 +5,4 @@ const { platformTimeout } = require('../common'); const assert = require('assert'); const { getDefaultAutoSelectFamilyAttemptTimeout } = require('net'); -assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(5000)); +assert.strictEqual(getDefaultAutoSelectFamilyAttemptTimeout(), platformTimeout(2500));