From 71fe736ff2f51e698a9d8bddc6d0452d7e8142a3 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <238531+indutny@users.noreply.github.com> Date: Tue, 30 May 2023 16:35:06 -0700 Subject: [PATCH] net: fix address iteration with autoSelectFamily When `autoSelectFamily` is set to `true`, `net.connect` is supposed to try connecting to both IPv4 and IPv6, interleaving the address types. Instead, it appears that the array that holds the addresses in the order they should be attempted was never used after being populated. --- lib/net.js | 2 +- test/parallel/test-net-autoselectfamily.js | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/net.js b/lib/net.js index 0c12ff72aa3c50..9f40b21efaabe0 100644 --- a/lib/net.js +++ b/lib/net.js @@ -1476,7 +1476,7 @@ function lookupAndConnectMultiple( const context = { socket: self, - addresses, + addresses: toAttempt, current: 0, port, localPort, diff --git a/test/parallel/test-net-autoselectfamily.js b/test/parallel/test-net-autoselectfamily.js index d1440951eea6d0..3cce88f9ce907e 100644 --- a/test/parallel/test-net-autoselectfamily.js +++ b/test/parallel/test-net-autoselectfamily.js @@ -117,7 +117,7 @@ function createDnsServer(ipv6Addrs, ipv4Addrs, cb) { // Test that only the last successful connection is established. { createDnsServer( - '::1', + ['2606:4700::6810:85e5', '2606:4700::6810:84e5', '::1'], ['104.20.22.46', '104.20.23.46', '127.0.0.1'], common.mustCall(function({ dnsServer, lookup }) { const ipv4Server = createServer((socket) => { @@ -144,7 +144,14 @@ function createDnsServer(ipv6Addrs, ipv4Addrs, cb) { connection.on('ready', common.mustCall(() => { assert.deepStrictEqual( connection.autoSelectFamilyAttemptedAddresses, - [`::1:${port}`, `104.20.22.46:${port}`, `104.20.23.46:${port}`, `127.0.0.1:${port}`] + [ + `2606:4700::6810:85e5:${port}`, + `104.20.22.46:${port}`, + `2606:4700::6810:84e5:${port}`, + `104.20.23.46:${port}`, + `::1:${port}`, + `127.0.0.1:${port}`, + ] ); }));