summaryrefslogtreecommitdiff
path: root/ext/node
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node')
-rw-r--r--ext/node/polyfills/http.ts6
-rw-r--r--ext/node/polyfills/internal/dns/utils.ts14
-rw-r--r--ext/node/polyfills/internal_binding/cares_wrap.ts13
-rw-r--r--ext/node/polyfills/net.ts24
4 files changed, 22 insertions, 35 deletions
diff --git a/ext/node/polyfills/http.ts b/ext/node/polyfills/http.ts
index f3f6f86ed..349caeea6 100644
--- a/ext/node/polyfills/http.ts
+++ b/ext/node/polyfills/http.ts
@@ -50,6 +50,7 @@ import { urlToHttpOptions } from "ext:deno_node/internal/url.ts";
import { kEmptyObject } from "ext:deno_node/internal/util.mjs";
import { constants, TCP } from "ext:deno_node/internal_binding/tcp_wrap.ts";
import { notImplemented, warnNotImplemented } from "ext:deno_node/_utils.ts";
+import { isWindows } from "ext:deno_node/_util/os.ts";
import {
connResetException,
ERR_HTTP_HEADERS_SENT,
@@ -1586,9 +1587,8 @@ export class ServerImpl extends EventEmitter {
port = options.port | 0;
}
- // TODO(bnoordhuis) Node prefers [::] when host is omitted,
- // we on the other hand default to 0.0.0.0.
- let hostname = options.host ?? "0.0.0.0";
+ // Use 0.0.0.0 for Windows, and [::] for other platforms.
+ let hostname = options.host ?? (isWindows ? "0.0.0.0" : "[::]");
if (hostname == "localhost") {
hostname = "127.0.0.1";
}
diff --git a/ext/node/polyfills/internal/dns/utils.ts b/ext/node/polyfills/internal/dns/utils.ts
index 226fce93d..1e0c3d9ed 100644
--- a/ext/node/polyfills/internal/dns/utils.ts
+++ b/ext/node/polyfills/internal/dns/utils.ts
@@ -416,20 +416,10 @@ export function emitInvalidHostnameWarning(hostname: string) {
);
}
-let dnsOrder = getOptionValue("--dns-result-order") || "ipv4first";
+let dnsOrder = getOptionValue("--dns-result-order") || "verbatim";
export function getDefaultVerbatim() {
- switch (dnsOrder) {
- case "verbatim": {
- return true;
- }
- case "ipv4first": {
- return false;
- }
- default: {
- return false;
- }
- }
+ return dnsOrder !== "ipv4first";
}
/**
diff --git a/ext/node/polyfills/internal_binding/cares_wrap.ts b/ext/node/polyfills/internal_binding/cares_wrap.ts
index 6feb7faf0..cbfea40b2 100644
--- a/ext/node/polyfills/internal_binding/cares_wrap.ts
+++ b/ext/node/polyfills/internal_binding/cares_wrap.ts
@@ -75,11 +75,18 @@ export function getaddrinfo(
const recordTypes: ("A" | "AAAA")[] = [];
- if (family === 0 || family === 4) {
+ if (family === 6) {
+ recordTypes.push("AAAA");
+ } else if (family === 4) {
recordTypes.push("A");
- }
- if (family === 0 || family === 6) {
+ } else if (family === 0 && hostname === "localhost") {
+ // Ipv6 is preferred over Ipv4 for localhost
recordTypes.push("AAAA");
+ recordTypes.push("A");
+ } else if (family === 0) {
+ // Only get Ipv4 addresses for the other hostnames
+ // This simulates what `getaddrinfo` does when the family is not specified
+ recordTypes.push("A");
}
(async () => {
diff --git a/ext/node/polyfills/net.ts b/ext/node/polyfills/net.ts
index 48e1d0de8..35d273be9 100644
--- a/ext/node/polyfills/net.ts
+++ b/ext/node/polyfills/net.ts
@@ -1871,23 +1871,13 @@ function _setupListenHandle(
// Try to bind to the unspecified IPv6 address, see if IPv6 is available
if (!address && typeof fd !== "number") {
- // TODO(@bartlomieju): differs from Node which tries to bind to IPv6 first
- // when no address is provided.
- //
- // Forcing IPv4 as a workaround for Deno not aligning with Node on
- // implicit binding on Windows.
- //
- // REF: https://github.com/denoland/deno/issues/10762
- // rval = _createServerHandle(DEFAULT_IPV6_ADDR, port, 6, fd, flags);
-
- // if (typeof rval === "number") {
- // rval = null;
- address = DEFAULT_IPV4_ADDR;
- addressType = 4;
- // } else {
- // address = DEFAULT_IPV6_ADDR;
- // addressType = 6;
- // }
+ if (isWindows) {
+ address = DEFAULT_IPV4_ADDR;
+ addressType = 4;
+ } else {
+ address = DEFAULT_IPV6_ADDR;
+ addressType = 6;
+ }
}
if (rval === null) {