@@ -1773,6 +1773,7 @@ function Server(options, connectionListener) {
17731773 this . _usingWorkers = false ;
17741774 this . _workers = [ ] ;
17751775 this . _unref = false ;
1776+ this . _listeningId = 1 ;
17761777
17771778 this . allowHalfOpen = options . allowHalfOpen || false ;
17781779 this . pauseOnConnect = ! ! options . pauseOnConnect ;
@@ -1954,10 +1955,14 @@ function listenInCluster(server, address, port, addressType,
19541955 backlog,
19551956 ...options ,
19561957 } ;
1958+ const listeningId = server . _listeningId ;
19571959 // Get the primary's server handle, and listen on it
19581960 cluster . _getServer ( server , serverQuery , listenOnPrimaryHandle ) ;
1959-
19601961 function listenOnPrimaryHandle ( err , handle ) {
1962+ if ( listeningId !== server . _listeningId ) {
1963+ handle . close ( ) ;
1964+ return ;
1965+ }
19611966 err = checkBindError ( err , port , handle ) ;
19621967
19631968 if ( err ) {
@@ -2089,9 +2094,14 @@ Server.prototype.listen = function(...args) {
20892094 throw new ERR_INVALID_ARG_VALUE ( 'options' , options ) ;
20902095} ;
20912096
2092- function lookupAndListen ( self , port , address , backlog , exclusive , flags ) {
2097+ function lookupAndListen ( self , port , address , backlog ,
2098+ exclusive , flags ) {
20932099 if ( dns === undefined ) dns = require ( 'dns' ) ;
2100+ const listeningId = self . _listeningId ;
20942101 dns . lookup ( address , function doListen ( err , ip , addressType ) {
2102+ if ( listeningId !== self . _listeningId ) {
2103+ return ;
2104+ }
20952105 if ( err ) {
20962106 self . emit ( 'error' , err ) ;
20972107 } else {
@@ -2237,6 +2247,7 @@ Server.prototype.getConnections = function(cb) {
22372247
22382248
22392249Server . prototype . close = function ( cb ) {
2250+ this . _listeningId ++ ;
22402251 if ( typeof cb === 'function' ) {
22412252 if ( ! this . _handle ) {
22422253 this . once ( 'close' , function close ( ) {
0 commit comments