From 40bda07ff5751cbb2665a2d134f64826fe3790a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Mon, 22 May 2023 01:02:10 +0200 Subject: fix(node): add http.Server.unref() (#19201) Closes https://github.com/denoland/deno/issues/19113 --- ext/node/polyfills/http.ts | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'ext') diff --git a/ext/node/polyfills/http.ts b/ext/node/polyfills/http.ts index 065ad2e0f..101d888f8 100644 --- a/ext/node/polyfills/http.ts +++ b/ext/node/polyfills/http.ts @@ -1500,6 +1500,8 @@ class ServerImpl extends EventEmitter { #addr: Deno.NetAddr; #hasClosed = false; + #server: Deno.Server; + #unref = false; #ac?: AbortController; #servePromise: Deferred; listening = false; @@ -1566,7 +1568,7 @@ class ServerImpl extends EventEmitter { return; } this.#ac = ac; - serve( + this.#server = serve( { handler: handler as Deno.ServeHandler, ...this.#addr, @@ -1577,13 +1579,31 @@ class ServerImpl extends EventEmitter { this.emit("listening"); }, }, - ).finished.then(() => this.#servePromise!.resolve()); + ); + if (this.#unref) { + this.#server.unref(); + } + this.#server.finished.then(() => this.#servePromise!.resolve()); } setTimeout() { console.error("Not implemented: Server.setTimeout()"); } + ref() { + if (this.#server) { + this.#server.ref(); + } + this.#unref = false; + } + + unref() { + if (this.#server) { + this.#server.unref(); + } + this.#unref = true; + } + close(cb?: (err?: Error) => void): this { const listening = this.listening; this.listening = false; @@ -1606,6 +1626,7 @@ class ServerImpl extends EventEmitter { this.#servePromise!.resolve(); } + this.#server = undefined; return this; } -- cgit v1.2.3