From c06b99b4e116a4b339a78582c7c60587350c655a Mon Sep 17 00:00:00 2001 From: Julian Grinblat Date: Wed, 9 Nov 2016 00:35:44 +0900 Subject: [PATCH 1/2] Don't delete ws when closing the server --- lib/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/server.js b/lib/server.js index 84d2d3a29..dac14e83b 100644 --- a/lib/server.js +++ b/lib/server.js @@ -191,7 +191,7 @@ Server.prototype.close = function () { if (this.ws) { debug('closing webSocketServer'); this.ws.close(); - delete this.ws; + // don't delete this.ws because it can be used again if the server starts listening again } return this; }; From d9bec842f29115c5a7df5fb766e47910e9a16382 Mon Sep 17 00:00:00 2001 From: Julian Grinblat Date: Thu, 10 Nov 2016 02:03:12 +0900 Subject: [PATCH 2/2] Add test to prevent server restart regression --- lib/server.js | 2 +- test/server.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/server.js b/lib/server.js index dac14e83b..5359f5204 100644 --- a/lib/server.js +++ b/lib/server.js @@ -191,7 +191,7 @@ Server.prototype.close = function () { if (this.ws) { debug('closing webSocketServer'); this.ws.close(); - // don't delete this.ws because it can be used again if the server starts listening again + // don't delete this.ws because it can be used again if the http server starts listening again } return this; }; diff --git a/test/server.js b/test/server.js index d2b79d1cb..eb56164b9 100644 --- a/test/server.js +++ b/test/server.js @@ -543,6 +543,27 @@ describe('server', function () { }); }); + it('should allow client reconnect after restarting (ws)', function (done) { + var opts = { transports: ['websocket'] }; + var engine = listen(opts, function (port) { + engine.httpServer.close(); + engine.httpServer.listen(port); + + var socket = new eioc.Socket('ws://localhost:%d'.s(port), { transports: ['websocket'] }); + + engine.once('connection', function (conn) { + setTimeout(function () { + conn.close(); + }, 10); + }); + + socket.once('close', function (reason) { + expect(reason).to.be('transport close'); + done(); + }); + }); + }); + it('should trigger when client closes', function (done) { var engine = listen({ allowUpgrades: false }, function (port) { var socket = new eioc.Socket('ws://localhost:%d'.s(port));