diff --git a/lib/server.js b/lib/server.js index 84d2d3a29..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(); - delete this.ws; + // 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));