Skip to content

Commit 00664f3

Browse files
authored
Check for closed socket before emiting close signal (#578)
Signed-off-by: yaacov <[email protected]>
1 parent cba73fe commit 00664f3

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

ports/tcpport.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,14 @@ class TcpPort extends EventEmitter {
139139
});
140140

141141
this._client.on("close", function(had_error) {
142-
self.openFlag = false;
143-
modbusSerialDebug("TCP port: signal close: " + had_error);
144-
handleCallback(had_error);
142+
if (self.openFlag) {
143+
self.openFlag = false;
144+
modbusSerialDebug("TCP port: signal close: " + had_error);
145+
handleCallback(had_error);
145146

146-
self.emit("close");
147-
self.removeAllListeners();
147+
self.emit("close");
148+
self.removeAllListeners();
149+
}
148150
});
149151

150152
this._client.on("error", function(had_error) {

ports/tcprtubufferedport.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,14 @@ class TcpRTUBufferedPort extends EventEmitter {
134134
});
135135

136136
this._client.on("close", function(had_error) {
137-
modbus.openFlag = false;
138-
handleCallback(had_error);
139-
modbus.emit("close");
137+
if (modbus.openFlag) {
138+
modbus.openFlag = false;
139+
modbusSerialDebug("TCP buffered port: signal close: " + had_error);
140+
handleCallback(had_error);
141+
142+
modbus.emit("close");
143+
modbus.removeAllListeners();
144+
}
140145
});
141146

142147
this._client.on("error", function(had_error) {
@@ -221,9 +226,8 @@ class TcpRTUBufferedPort extends EventEmitter {
221226
*/
222227
close(callback) {
223228
this.callback = callback;
224-
this._client.end(callback);
225-
226-
this.removeAllListeners();
229+
// DON'T pass callback to `end()` here, it will be handled by client.on('close') handler
230+
this._client.end();
227231
}
228232

229233
/**

0 commit comments

Comments
 (0)