From 92cafed82d023965c02b264026f187d31e1963e0 Mon Sep 17 00:00:00 2001 From: dgreif Date: Tue, 10 Aug 2021 21:50:16 -0700 Subject: [PATCH] fix: close connection after 1 minute of inactivity --- src/my-link.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/my-link.ts b/src/my-link.ts index 05062d2..da87ecb 100644 --- a/src/my-link.ts +++ b/src/my-link.ts @@ -4,17 +4,34 @@ import { delay, logDebug, logError } from './util' class ConnectionManager { private previousRequestId = 0 private previousRequest: Promise = Promise.resolve() + private timeout: any constructor(private host: string, private port: number) {} private socketPromise?: Promise private async openSocket(): Promise { + if (this.timeout) { + clearTimeout(this.timeout) + } + this.timeout = setTimeout(() => { + if (this.socketPromise) { + this.socketPromise.then((socket) => { + if (!socket.destroyed) { + socket.destroy() + } + }) + } + }, 60000) + + logDebug('Getting Socket') if (this.socketPromise) { const socketPromise = this.socketPromise, socket = await this.socketPromise + logDebug('Have a socket') if (socket.destroyed && socketPromise === this.socketPromise) { + logDebug('Socket has been destroyed') // current socket has been destoryed this.socketPromise = undefined return this.openSocket() @@ -27,12 +44,14 @@ class ConnectionManager { } this.socketPromise = new Promise((resolve, reject) => { + logDebug('Creating fresh socket') const socket: Socket = createConnection( { host: this.host, port: this.port, }, () => { + logDebug('Socket created') resolve(socket) } )