diff --git a/src/server/http/serveStreamableHttp.ts b/src/server/http/serveStreamableHttp.ts index a134bacc57..2a90062040 100644 --- a/src/server/http/serveStreamableHttp.ts +++ b/src/server/http/serveStreamableHttp.ts @@ -385,16 +385,18 @@ export const serveStreamableHttp = async ( return { url, close }; }; -/** Drop open connections and release the port. */ +/** Stop accepting, drop open connections and release the port. */ const closeHttpServer = ( httpServer: ReturnType, ): Promise => { - httpServer.closeAllConnections(); - return new Promise((resolve, reject) => { + // close() first, as Node documents: a connection accepted before it would otherwise miss the forced-close pass. + const closed = new Promise((resolve, reject) => { httpServer.close((error) => error === undefined ? resolve() : reject(error), ); }); + httpServer.closeAllConnections(); + return closed; }; /** Translate one node:http exchange through `route`, logging a failure and answering it when headers are still open. */