net: register net.Server callback only once
Only register once for listening when passing a callback to Server.listen(), this prevents servers recycled using close() from invoking the callback when Server.listen() is called later.
This commit is contained in:
Родитель
fab68aa1ed
Коммит
4b0e36810a
|
@ -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]);
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
});
|
Загрузка…
Ссылка в новой задаче