socket cleanup

This commit is contained in:
Benjamin Wilson
2025-02-03 15:39:03 -05:00
parent 40ee610600
commit 674b02ca9d
+26 -13
View File
@@ -43,8 +43,7 @@ export class StratumV1Service implements OnModuleInit {
private startSocketServer(port: number) { private startSocketServer(port: number) {
const server = new Server(async (socket: Socket) => { const server = new Server(async (socket: Socket) => {
// Set 5-minute timeout
//5 min
socket.setTimeout(1000 * 60 * 5); socket.setTimeout(1000 * 60 * 5);
const client = new StratumV1Client( const client = new StratumV1Client(
@@ -59,32 +58,46 @@ export class StratumV1Service implements OnModuleInit {
this.addressSettingsService this.addressSettingsService
); );
// Unified cleanup function
socket.on('close', async (hadError: boolean) => { const cleanup = async (reason: string) => {
if (client.extraNonceAndSessionId != null) { if (client.extraNonceAndSessionId != null) {
// Handle socket disconnection
await client.destroy(); await client.destroy();
//console.log(`Client ${client.extraNonceAndSessionId} disconnected, hadError?:${hadError}`); console.log(`Client ${client.extraNonceAndSessionId} disconnected, Reason: ${reason}`);
} }
}); if (!socket.destroyed) {
socket.on('timeout', () => {
console.log(`socket timeout ${socket.remoteAddress}, ${socket.bytesRead}/${socket.bytesWritten}, ${client.clientSubscription?.userAgent}`);
socket.end(); socket.end();
socket.destroy(); socket.destroy();
}
};
// Handle client disconnection
socket.on('close', async (hadError: boolean) => {
await cleanup(hadError ? "Error" : "Normal Closure");
}); });
socket.on('error', async (error: Error) => { }); // Handle socket timeouts
socket.on('timeout', async () => {
console.log(`Socket timeout ${socket.remoteAddress}, ${socket.bytesRead}/${socket.bytesWritten}, ${client.clientSubscription?.userAgent}`);
await cleanup("Timeout");
});
// //console.log(`Client disconnected, socket error, ${client.extraNonceAndSessionId}`); // Handle errors properly
socket.on('error', async (error: Error) => {
console.log(`Socket error: ${error.message}`);
await cleanup("Error");
});
});
// Ensure server itself handles errors
server.on('error', (err) => {
console.error(`Server error: ${err.message}`);
}); });
server.listen(port, () => { server.listen(port, () => {
console.log(`Stratum server is listening on port ${port}`); console.log(`Stratum server is listening on port ${port}`);
}); });
}
}
} }