镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

dns.lookup('localhost', { all: true}) returns only ::1 with Node.js v22.12, while v22.11 returned both ::1 and 127.0.0.1 #56137

Description

@jasongin

Version

v22.12.0

Platform

Windows 11 (Microsoft Windows NT 10.0.26100.0 x64)

Subsystem

dns

What steps will reproduce the bug?

On my Windows 11 system, the localhost hostname resolves to both ::1 and 127.0.0.1, as confirmed by PowerShell Resolve-DnsName:

PS> Resolve-DnsName localhost
Name             Type   TTL   Section    IPAddress
----             ----   ---   -------    ---------
localhost        AAAA   1200  Question   ::1
localhost        A      1200  Question   127.0.0.1

And with Node.js v22.11 (and v20, and v18), both addresses are returned by a DNS lookup, as expected:

PS> node -v
v22.11.0
PS> node -e "require('dns').lookup('localhost', {all: true}, (err, addresses) => console.log(JSON.stringify(addresses, null, '  ')))"
[
  {
    "address": "::1",
    "family": 6
  },
  {
    "address": "127.0.0.1",
    "family": 4
  }
]

However with Node.js v22.12, only ::1 is returned:

PS> node -v
v22.12.0
PS> node -e "require('dns').lookup('localhost', {all: true}, (err, addresses) => console.log(JSON.stringify(addresses, null, '  ')))"
[
  {
    "address": "::1",
    "family": 6
  }
]

How often does it reproduce? Is there a required condition?

It repros consistently on Windows.

I do not see the same problem on Linux: after editing /etc/hosts to include dual mappings for localhost, I do see both addresses returned from the Node.js DNS lookup, and it is consistent between Node.js v22.11 and v22.12.

What is the expected behavior? Why is that the expected behavior?

I found this bug because we have some Node.js test code that needs to connect to a port on localhost without knowing whether the local server is listening on the IPv4 or IPv6 localhost. It actually uses net.createConection({..., autoSelectFamily: true }), but the problem seems to be with the DNS resolution before the "happy eyeballs" algorithm gets a chance to auto-select an address family. Because only ::1 is tried, the connection fails if the local server was actually listening on IPv4.

What do you see instead?

Error: connect ECONNREFUSED ::1:51793

...when the server was actually listening on 127.0.0.1:51793

Additional information

No response

Activity

  1. added
    dnsIssues and PRs related to the dns subsystem.
    windowsIssues and PRs related to the Windows platform.
    on Dec 5, 2024
  2. lpinca commented on Dec 11, 2024

    @lpinca
    Member

    Bisecting points to ecedcba as the first bad commit.

  3. added a commit that references this issue on Dec 11, 2024
  4. added a commit that references this issue on Dec 17, 2024
  5. added a commit that references this issue on Jan 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugIssues and PRs for confirmed bugs.dnsIssues and PRs related to the dns subsystem.windowsIssues and PRs related to the Windows platform.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions