diff --git a/changelog.md b/changelog.md index beec6c4..b65b2b7 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,11 @@ # Changelog +## 2025-03-01 - 3.20.2 - fix(PortProxy) +Enhance connection cleanup handling in PortProxy + +- Add checks to ensure timers are reset only if outgoing socket is active +- Prevent setting outgoingActive if the connection is already closed + ## 2025-03-01 - 3.20.1 - fix(PortProxy) Improve IP allowance check for forced domains diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 7387680..fafc33c 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@push.rocks/smartproxy', - version: '3.20.1', + version: '3.20.2', description: 'A powerful proxy package that effectively handles high traffic, with features such as SSL/TLS support, port proxying, WebSocket handling, and dynamic routing with authentication options.' } diff --git a/ts/classes.portproxy.ts b/ts/classes.portproxy.ts index a25714b..58762b5 100644 --- a/ts/classes.portproxy.ts +++ b/ts/classes.portproxy.ts @@ -354,6 +354,7 @@ export class PortProxy { // Initialize a cleanup timer for max connection lifetime. if (this.settings.maxConnectionLifetime) { + // Flags to track if data was seen from each side. let incomingActive = false; let outgoingActive = false; const resetCleanupTimer = () => { @@ -370,15 +371,19 @@ export class PortProxy { resetCleanupTimer(); + // Only reset the timer if outgoing socket is still active. socket.on('data', () => { incomingActive = true; - if (incomingActive && outgoingActive) { + // Check if outgoing has not been closed before resetting timer. + if (!connectionRecord.outgoingClosedTime && incomingActive && outgoingActive) { resetCleanupTimer(); incomingActive = false; outgoingActive = false; } }); targetSocket.on('data', () => { + // If outgoing is closed, do not set outgoingActive. + if (connectionRecord.outgoingClosedTime) return; outgoingActive = true; if (incomingActive && outgoingActive) { resetCleanupTimer();