nodejs-websocket icon indicating copy to clipboard operation
nodejs-websocket copied to clipboard

Max call stack size exceeded on Connection.close

Open NishantDesai1306 opened this issue 7 years ago • 3 comments

I have a periodic service in nodejs that tries to create 30-40 socket connections and close it in case (it gets connected successfully or some error occurs while connecting) but every now an then I get Maxmimum call stack size exceeded error at line connection.close()

My Code structure

const connection = ws.connect(socketServerUrl, (err) => {
    if (err) {
        // console.log the error
    }
    else {
        connection.sendPing();
    }
});

connection.on('error', (err) => {
    const reason = err && err.message ? err.message : err;

    // THIS IS WHERE I GET THAT MAX CALL STACK SIZE REACHED EXCEPTION
    connection.close(); // release the connection
});

connection.on('pong', (data) => {
    connection.close(); // release the connection
});

Error Screenshot image

NishantDesai1306 avatar Aug 27 '18 08:08 NishantDesai1306

I am also open to other better ways to do this, basically what I need to do is check every few minutes whether socket servers are accepting connection or not.

NishantDesai1306 avatar Aug 27 '18 08:08 NishantDesai1306

i have the same problem when close browser or refresh browser

taomas avatar Sep 18 '18 02:09 taomas

Hi, the problem here seems to be a loop error -> close -> error -> ...

The error event will naturally also close the socket (https://github.com/sitegui/nodejs-websocket#event-errorerrobj), normally you don't have to explicit call it.

However, the lib shouldn't crash when someone does it :) This happens because a call to close() (by WebSocket spec) does not close the socket right away. First it tries to inform the peer the connection will be dropped by a given reason. The underlying call to write errors and cycle error -> close -> write -> error -> ... begins

I don't have the time to fix this issue for now, however I'm open for a PR if you want to dive into the code.

Best regards,

sitegui avatar Nov 28 '18 16:11 sitegui