diff --git a/lib/manager.ts b/lib/manager.ts index 5a705977..fe5c3fa3 100644 --- a/lib/manager.ts +++ b/lib/manager.ts @@ -465,9 +465,7 @@ export class Manager< if (!socket) { socket = new Socket(this, nsp, opts); this.nsps[nsp] = socket; - } - - if (this._autoConnect) { + } else if (this._autoConnect && !socket.active) { socket.connect(); } diff --git a/test/connection.ts b/test/connection.ts index af0215de..1034cb2b 100644 --- a/test/connection.ts +++ b/test/connection.ts @@ -838,4 +838,57 @@ describe("connection", () => { }); }); }); + + it("should not reopen a cached but active socket", () => { + return wrap((done) => { + const manager = new Manager(BASE_URL, { + autoConnect: true, + }); + + let i = 0; + const expected = ["0", "1"]; + + manager.engine.on("packetCreate", ({ data }) => { + expect(data).to.eql(expected[i++]); + }); + + manager.once("open", () => { + const socket = manager.socket("/"); + const socket2 = manager.socket("/"); + + expect(socket2 === socket).to.be(true); + + socket.on("connect", () => { + socket.disconnect(); + done(); + }); + }); + }); + }); + + it("should not reopen an already active socket", () => { + return wrap((done) => { + const manager = new Manager(BASE_URL, { + autoConnect: true, + }); + + let i = 0; + const expected = ["0", "0/foo,", "1", "1/foo,"]; + + manager.engine.on("packetCreate", ({ data }) => { + expect(data).to.eql(expected[i++]); + }); + + manager.once("open", () => { + const socket = manager.socket("/"); + const socketFoo = manager.socket("/foo"); + + socket.on("connect", () => { + socket.disconnect(); + socketFoo.disconnect(); + done(); + }); + }); + }); + }); });