This commit is contained in:
Juergen Kunz 2025-06-06 15:00:46 +00:00
parent 233c98e5ff
commit 578d1ba2f7

View File

@ -199,25 +199,29 @@ export class RouteConnectionHandler {
setupSocketHandlers( setupSocketHandlers(
underlyingSocket, underlyingSocket,
(reason) => { (reason) => {
// Only cleanup if connection hasn't been fully established // Always cleanup when incoming socket closes
// Check if outgoing connection exists and is connected // This prevents connection accumulation in proxy chains
if (!record.outgoing || record.outgoing.readyState !== 'open') { logger.log('debug', `Connection ${connectionId} closed during immediate routing: ${reason}`, {
logger.log('debug', `Connection ${connectionId} closed during immediate routing: ${reason}`, { connectionId,
remoteIP: record.remoteIP,
reason,
hasOutgoing: !!record.outgoing,
outgoingState: record.outgoing?.readyState,
component: 'route-handler'
});
// If there's a pending or established outgoing connection, destroy it
if (record.outgoing && !record.outgoing.destroyed) {
logger.log('debug', `Destroying outgoing connection for ${connectionId}`, {
connectionId, connectionId,
remoteIP: record.remoteIP, outgoingState: record.outgoing.readyState,
reason,
hasOutgoing: !!record.outgoing,
outgoingState: record.outgoing?.readyState,
component: 'route-handler' component: 'route-handler'
}); });
record.outgoing.destroy();
// If there's a pending outgoing connection, destroy it
if (record.outgoing && !record.outgoing.destroyed) {
record.outgoing.destroy();
}
this.connectionManager.cleanupConnection(record, reason);
} }
// Always cleanup the connection record
this.connectionManager.cleanupConnection(record, reason);
}, },
undefined, // Use default timeout handler undefined, // Use default timeout handler
'immediate-route-client' 'immediate-route-client'