destroyable-server
Advanced tools
Comparing version
@@ -37,2 +37,11 @@ "use strict"; | ||
}; | ||
const checkDestroyed = (conn) => { | ||
do { | ||
if (conn.destroyed) | ||
return true; | ||
if (!conn._parent) | ||
return false; | ||
conn = conn._parent; | ||
} while (conn); | ||
}; | ||
server.on('connection', function (conn) { | ||
@@ -67,3 +76,6 @@ const key = conn.remoteAddress + ':' + conn.remotePort; | ||
closePromises.push(new Promise((resolve) => { | ||
if (conn.closed || conn.destroyed) | ||
if (conn.closed || // Node v20+ | ||
// For Node <v18, .closed doesn't exist. For Node v18/19, 'destroyed' isn't always set | ||
// on TLSSockets when the underlying socket is destroyed (so we check parents). | ||
checkDestroyed(conn)) | ||
return resolve(); | ||
@@ -70,0 +82,0 @@ conn.on('close', resolve); |
19
index.ts
@@ -11,2 +11,4 @@ import * as net from 'net'; | ||
type Socket = net.Socket & { _parent?: Socket }; | ||
/** | ||
@@ -24,3 +26,3 @@ * Makes a server 'destroyable': tracks all active server connections, and adds a | ||
export function makeDestroyable<S extends net.Server>(server: S): DestroyableServer<S> { | ||
const connectionDict: { [key: string]: Array<net.Socket> } = {}; | ||
const connectionDict: { [key: string]: Array<Socket> } = {}; | ||
@@ -47,2 +49,10 @@ const addConnection = (key: string, conn: net.Socket) => { | ||
const checkDestroyed = (conn: Socket) => { | ||
do { | ||
if (conn.destroyed) return true; | ||
if (!conn._parent) return false; | ||
conn = conn._parent; | ||
} while (conn); | ||
} | ||
server.on('connection', function(conn: net.Socket) { | ||
@@ -80,3 +90,8 @@ const key = conn.remoteAddress + ':' + conn.remotePort; | ||
closePromises.push(new Promise((resolve) => { | ||
if (conn.closed || conn.destroyed) return resolve(); | ||
if ( | ||
conn.closed || // Node v20+ | ||
// For Node <v18, .closed doesn't exist. For Node v18/19, 'destroyed' isn't always set | ||
// on TLSSockets when the underlying socket is destroyed (so we check parents). | ||
checkDestroyed(conn) | ||
) return resolve(); | ||
conn.on('close', resolve); | ||
@@ -83,0 +98,0 @@ })); |
{ | ||
"name": "destroyable-server", | ||
"version": "1.1.0", | ||
"version": "1.1.1", | ||
"author": "Tim Perry <tim@httptoolkit.com>", | ||
@@ -5,0 +5,0 @@ "description": "A tiny Node.js module to make any server force-closeable", |
Sorry, the diff of this file is not supported yet
25879
5.68%214
13.23%