Merge pull request #3630 from Steve-Mcl/fix-tcp-sockets-crash

Dont delete TCP socket twice
This commit is contained in:
Stephen McLaughlin 2022-05-27 07:37:28 +01:00 committed by GitHub
commit 62cd3b2061
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 17 deletions

View File

@ -435,7 +435,7 @@ module.exports = function(RED) {
}); });
} }
else { else {
var connectedSockets = []; const connectedSockets = new Set();
node.status({text:RED._("tcpin.status.connections",{count:0})}); node.status({text:RED._("tcpin.status.connections",{count:0})});
let srv = net; let srv = net;
let connOpts; let connOpts;
@ -456,16 +456,16 @@ module.exports = function(RED) {
}); });
socket.on('close',function() { socket.on('close',function() {
node.log(RED._("tcpin.status.connection-closed",{host:socket.remoteAddress, port:socket.remotePort})); node.log(RED._("tcpin.status.connection-closed",{host:socket.remoteAddress, port:socket.remotePort}));
connectedSockets.splice(connectedSockets.indexOf(socket),1); connectedSockets.delete(socket);
node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.length})}); node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.size})});
}); });
socket.on('error',function() { socket.on('error',function() {
node.log(RED._("tcpin.errors.socket-error",{host:socket.remoteAddress, port:socket.remotePort})); node.log(RED._("tcpin.errors.socket-error",{host:socket.remoteAddress, port:socket.remotePort}));
connectedSockets.splice(connectedSockets.indexOf(socket),1); connectedSockets.delete(socket);
node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.length})}); node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.size})});
}); });
connectedSockets.push(socket); connectedSockets.add(socket);
node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.length})}); node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.size})});
}); });
node.on("input", function(msg, nodeSend, nodeDone) { node.on("input", function(msg, nodeSend, nodeDone) {
@ -478,10 +478,10 @@ module.exports = function(RED) {
} else { } else {
buffer = Buffer.from(""+msg.payload); buffer = Buffer.from(""+msg.payload);
} }
for (var i = 0; i < connectedSockets.length; i += 1) { connectedSockets.forEach(soc => {
if (node.doend === true) { connectedSockets[i].end(buffer); } if (node.doend === true) { soc.end(buffer); }
else { connectedSockets[i].write(buffer); } else { soc.write(buffer); }
} })
} }
nodeDone(); nodeDone();
}); });
@ -498,12 +498,10 @@ module.exports = function(RED) {
} else { } else {
node.log(RED._("tcpin.status.listening-port",{port:node.port})); node.log(RED._("tcpin.status.listening-port",{port:node.port}));
node.on('close', function() { node.on('close', function() {
for (var c in connectedSockets) { connectedSockets.forEach(soc => {
if (connectedSockets.hasOwnProperty(c)) { soc.end();
connectedSockets[c].end(); soc.unref();
connectedSockets[c].unref(); })
}
}
server.close(); server.close();
node.log(RED._("tcpin.status.stopped-listening",{port:node.port})); node.log(RED._("tcpin.status.stopped-listening",{port:node.port}));
}); });