fix(PortProxy): Enhance connection cleanup handling in PortProxy

This commit is contained in:
Philipp Kunz 2025-03-01 20:31:50 +00:00
parent d647e77cdf
commit a5a7781c17
3 changed files with 13 additions and 2 deletions

View File

@ -1,5 +1,11 @@
# Changelog # 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) ## 2025-03-01 - 3.20.1 - fix(PortProxy)
Improve IP allowance check for forced domains Improve IP allowance check for forced domains

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartproxy', 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.' 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.'
} }

View File

@ -354,6 +354,7 @@ export class PortProxy {
// Initialize a cleanup timer for max connection lifetime. // Initialize a cleanup timer for max connection lifetime.
if (this.settings.maxConnectionLifetime) { if (this.settings.maxConnectionLifetime) {
// Flags to track if data was seen from each side.
let incomingActive = false; let incomingActive = false;
let outgoingActive = false; let outgoingActive = false;
const resetCleanupTimer = () => { const resetCleanupTimer = () => {
@ -370,15 +371,19 @@ export class PortProxy {
resetCleanupTimer(); resetCleanupTimer();
// Only reset the timer if outgoing socket is still active.
socket.on('data', () => { socket.on('data', () => {
incomingActive = true; incomingActive = true;
if (incomingActive && outgoingActive) { // Check if outgoing has not been closed before resetting timer.
if (!connectionRecord.outgoingClosedTime && incomingActive && outgoingActive) {
resetCleanupTimer(); resetCleanupTimer();
incomingActive = false; incomingActive = false;
outgoingActive = false; outgoingActive = false;
} }
}); });
targetSocket.on('data', () => { targetSocket.on('data', () => {
// If outgoing is closed, do not set outgoingActive.
if (connectionRecord.outgoingClosedTime) return;
outgoingActive = true; outgoingActive = true;
if (incomingActive && outgoingActive) { if (incomingActive && outgoingActive) {
resetCleanupTimer(); resetCleanupTimer();