From c5d82b70fb1d0546373328e15fc65a612a9466e9 Mon Sep 17 00:00:00 2001 From: yaacov Date: Wed, 19 Feb 2025 10:26:58 +0200 Subject: [PATCH] Check for closed socket before emiting close signal Signed-off-by: yaacov --- ports/tcpport.js | 12 +++++++----- ports/tcprtubufferedport.js | 16 ++++++++++------ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/ports/tcpport.js b/ports/tcpport.js index 25633b09..215258bb 100644 --- a/ports/tcpport.js +++ b/ports/tcpport.js @@ -139,12 +139,14 @@ class TcpPort extends EventEmitter { }); this._client.on("close", function(had_error) { - self.openFlag = false; - modbusSerialDebug("TCP port: signal close: " + had_error); - handleCallback(had_error); + if (self.openFlag) { + self.openFlag = false; + modbusSerialDebug("TCP port: signal close: " + had_error); + handleCallback(had_error); - self.emit("close"); - self.removeAllListeners(); + self.emit("close"); + self.removeAllListeners(); + } }); this._client.on("error", function(had_error) { diff --git a/ports/tcprtubufferedport.js b/ports/tcprtubufferedport.js index 41e0fa30..116cebd1 100644 --- a/ports/tcprtubufferedport.js +++ b/ports/tcprtubufferedport.js @@ -134,9 +134,14 @@ class TcpRTUBufferedPort extends EventEmitter { }); this._client.on("close", function(had_error) { - modbus.openFlag = false; - handleCallback(had_error); - modbus.emit("close"); + if (modbus.openFlag) { + modbus.openFlag = false; + modbusSerialDebug("TCP buffered port: signal close: " + had_error); + handleCallback(had_error); + + modbus.emit("close"); + modbus.removeAllListeners(); + } }); this._client.on("error", function(had_error) { @@ -221,9 +226,8 @@ class TcpRTUBufferedPort extends EventEmitter { */ close(callback) { this.callback = callback; - this._client.end(callback); - - this.removeAllListeners(); + // DON'T pass callback to `end()` here, it will be handled by client.on('close') handler + this._client.end(); } /**