diff --git a/lib/net.js b/lib/net.js index 561ebaec1fb..8404d6f44ca 100644 --- a/lib/net.js +++ b/lib/net.js @@ -698,7 +698,7 @@ Server.prototype.listen = function() { var lastArg = arguments[arguments.length - 1]; if (typeof lastArg == 'function') { - self.addListener('listening', lastArg); + self.once('listening', lastArg); } var port = toPort(arguments[0]); diff --git a/test/simple/test-net-server-listen-remove-callback.js b/test/simple/test-net-server-listen-remove-callback.js new file mode 100644 index 00000000000..50733da9e4e --- /dev/null +++ b/test/simple/test-net-server-listen-remove-callback.js @@ -0,0 +1,19 @@ +var common = require('../common'); +var assert = require('assert'); +var net = require('net'); + +// Server should only fire listen callback once +var server = net.createServer(); + +server.on('close', function() { + var listeners = server.listeners('listening'); + console.log('Closed, listeners:', listeners.length); + assert.equal(0, listeners.length); +}); + +server.listen(3000, function() { + server.close(); + server.listen(3001, function() { + server.close(); + }); +});