Skip to content

Commit 35e6eea

Browse files
yciabaudfeross
authored andcommitted
Close the websocket only when no one is using it
1 parent c2115fb commit 35e6eea

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

lib/client/websocket-tracker.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ WebSocketTracker.prototype.destroy = function (cb) {
8888
self.destroyed = true
8989
clearInterval(self.interval)
9090

91-
delete socketPool[self.announceUrl]
91+
if (socketPool[self.announceUrl]) socketPool[self.announceUrl].consumers--
9292

9393
self.socket.removeListener('connect', self._onSocketConnectBound)
9494
self.socket.removeListener('data', self._onSocketDataBound)
@@ -100,11 +100,16 @@ WebSocketTracker.prototype.destroy = function (cb) {
100100
self._onSocketDataBound = null
101101
self._onSocketCloseBound = null
102102

103-
self.socket.on('error', noop) // ignore all future errors
104-
try {
105-
self.socket.destroy(cb)
106-
} catch (err) {
107-
cb(null)
103+
if (socketPool[self.announceUrl].consumers === 0) {
104+
delete socketPool[self.announceUrl]
105+
106+
self.socket.on('error', noop) // ignore all future errors
107+
108+
try {
109+
self.socket.destroy(cb)
110+
} catch (err) {
111+
if (cb) cb()
112+
}
108113
}
109114

110115
self.socket = null
@@ -122,7 +127,10 @@ WebSocketTracker.prototype._openSocket = function () {
122127
self.socket = socketPool[self.announceUrl]
123128
if (!self.socket) {
124129
self.socket = socketPool[self.announceUrl] = new Socket(self.announceUrl)
130+
self.socket.consumers = 1
125131
self.socket.on('connect', self._onSocketConnectBound)
132+
} else {
133+
socketPool[self.announceUrl].consumers++
126134
}
127135

128136
self.socket.on('data', self._onSocketDataBound)

server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,7 @@ Server.prototype._onWebSocketClose = function (socket) {
599599
var swarm = self.torrents[infoHash]
600600
if (swarm) {
601601
swarm.announce({
602+
type: 'ws',
602603
event: 'stopped',
603604
numwant: 0,
604605
peer_id: socket.peerId

0 commit comments

Comments
 (0)