diff --git a/lib/client/websocket-tracker.js b/lib/client/websocket-tracker.js index ddb5e29..7bd5613 100644 --- a/lib/client/websocket-tracker.js +++ b/lib/client/websocket-tracker.js @@ -88,7 +88,7 @@ WebSocketTracker.prototype.destroy = function (cb) { self.destroyed = true clearInterval(self.interval) - delete socketPool[self.announceUrl] + if (socketPool[self.announceUrl]) socketPool[self.announceUrl].consumers-- self.socket.removeListener('connect', self._onSocketConnectBound) self.socket.removeListener('data', self._onSocketDataBound) @@ -100,11 +100,16 @@ WebSocketTracker.prototype.destroy = function (cb) { self._onSocketDataBound = null self._onSocketCloseBound = null - self.socket.on('error', noop) // ignore all future errors - try { - self.socket.destroy(cb) - } catch (err) { - cb(null) + if (socketPool[self.announceUrl].consumers === 0) { + delete socketPool[self.announceUrl] + + self.socket.on('error', noop) // ignore all future errors + + try { + self.socket.destroy(cb) + } catch (err) { + if (cb) cb() + } } self.socket = null @@ -122,7 +127,10 @@ WebSocketTracker.prototype._openSocket = function () { self.socket = socketPool[self.announceUrl] if (!self.socket) { self.socket = socketPool[self.announceUrl] = new Socket(self.announceUrl) + self.socket.consumers = 1 self.socket.on('connect', self._onSocketConnectBound) + } else { + socketPool[self.announceUrl].consumers++ } self.socket.on('data', self._onSocketDataBound) diff --git a/server.js b/server.js index c4791ec..ab8aa95 100644 --- a/server.js +++ b/server.js @@ -599,6 +599,7 @@ Server.prototype._onWebSocketClose = function (socket) { var swarm = self.torrents[infoHash] if (swarm) { swarm.announce({ + type: 'ws', event: 'stopped', numwant: 0, peer_id: socket.peerId