diff --git a/src/server/http/serveStreamableHttp.ts b/src/server/http/serveStreamableHttp.ts index 8d8c578e6e..1723acb82c 100644 --- a/src/server/http/serveStreamableHttp.ts +++ b/src/server/http/serveStreamableHttp.ts @@ -297,12 +297,7 @@ export const serveStreamableHttp = async ( ); const closeListener = async (): Promise => { stopped = true; - httpServer.closeAllConnections(); - await new Promise((resolve, reject) => { - httpServer.close((error) => - error === undefined ? resolve() : reject(error), - ); - }); + await closeHttpServer(httpServer); }; try { httpServer.listen(port, host); @@ -313,7 +308,8 @@ export const serveStreamableHttp = async ( const bound = httpServer.address(); let url: string; try { - ((url = endpointUrl(bound)), (origin = new URL(url).origin)); + url = endpointUrl(bound); + origin = new URL(url).origin; } catch (cause: unknown) { await closeListener().catch(() => undefined); throw new StreamableHttpListenError(cause); @@ -356,6 +352,18 @@ export const serveStreamableHttp = async ( return { url, close }; }; +/** Drop open connections and release the port. */ +const closeHttpServer = ( + httpServer: ReturnType, +): Promise => { + httpServer.closeAllConnections(); + return new Promise((resolve, reject) => { + httpServer.close((error) => + error === undefined ? resolve() : reject(error), + ); + }); +}; + /** Translate one node:http exchange through `route`, logging a failure and answering it when headers are still open. */ const serveNodeRequest = async ( target: {