From 8ec4d45d0b7d0ea049b52f762a0abd5b48525392 Mon Sep 17 00:00:00 2001 From: Daniel McNally Date: Tue, 4 Aug 2020 07:30:24 -0400 Subject: [PATCH] fix(p2p): remove socket listeners after destroy This ensures we don't remove listeners from the peer TCP socket before the socket is destroyed. This prevents edge case errors where a socket emits an error in the split second before it is destroyed. --- lib/p2p/Peer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/p2p/Peer.ts b/lib/p2p/Peer.ts index 54db6900e..dd3e9cdb1 100644 --- a/lib/p2p/Peer.ts +++ b/lib/p2p/Peer.ts @@ -340,7 +340,6 @@ class Peer extends EventEmitter { this.status = PeerStatus.Closed; if (this.socket) { - this.socket.removeAllListeners(); if (!this.socket.destroyed) { if (reason !== undefined) { this.logger.debug(`Peer ${this.label}: closing socket. reason: ${DisconnectionReason[reason]}`); @@ -349,6 +348,7 @@ class Peer extends EventEmitter { } this.socket.destroy(); + this.socket.removeAllListeners(); } delete this.socket; } @@ -555,7 +555,7 @@ class Peer extends EventEmitter { } else { this.socket = net.connect(this.address.port, this.address.host); this.socket.once('connect', onConnect); - this.socket.once('error', onError); + this.socket.on('error', onError); } };