diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-05-22 01:02:10 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-22 01:02:10 +0200 |
commit | 40bda07ff5751cbb2665a2d134f64826fe3790a8 (patch) | |
tree | 6b7527ec463551ba86bd20d640616e39f4e2e461 /ext/node | |
parent | 9ec49897766d9c22f6c7bafabdd3e3f3a4b68ab1 (diff) |
fix(node): add http.Server.unref() (#19201)
Closes https://github.com/denoland/deno/issues/19113
Diffstat (limited to 'ext/node')
-rw-r--r-- | ext/node/polyfills/http.ts | 25 |
1 files changed, 23 insertions, 2 deletions
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<void>; 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; } |