roccomuso / netcat

:computer: Netcat client and server modules written in pure Javascript for Node.js.
MIT License
419 stars 43 forks source link

Memory leak with `socket.destroy()` on 'connection' (server) #10

Open buckle2000 opened 5 years ago

buckle2000 commented 5 years ago

Library version: v1.4.0 node: v10.14.2

Server:

const NetcatServer = require('netcat/server')
const nc = new NetcatServer().k().port(1234).listen()

nc.on('connection', socket => {
    // socket.end() // this will not cause trouble
    socket.destroy() // this will
})

Client:

# bash
timeout 0.1 nc localhost 1234
timeout 0.1 nc localhost 1234
timeout 0.1 nc localhost 1234
# do this many times

Error:

(node:21020) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 unpipe listeners added. Use emitter.setMaxListeners() to increase limit
(node:21020) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 drainlisteners added. Use emitter.setMaxListeners() to increase limit
(node:21020) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 errorlisteners added. Use emitter.setMaxListeners() to increase limit
(node:21020) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 closelisteners added. Use emitter.setMaxListeners() to increase limit
(node:21020) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 finish listeners added. Use emitter.setMaxListeners() to increase limit
buckle2000 commented 5 years ago

Stack trace showed tcpServer.js:72

    /* incoming */
    socket
      .pipe(streamDebug.call(self, debug, IPandPort))
      .pipe(self._filter, { end: !self._keepalive }) // custom filter

Honestly, I have no idea where the problem came from.