@@ -1773,6 +1773,7 @@ function Server(options, connectionListener) {
1773
1773
this . _usingWorkers = false ;
1774
1774
this . _workers = [ ] ;
1775
1775
this . _unref = false ;
1776
+ this . _listeningId = 1 ;
1776
1777
1777
1778
this . allowHalfOpen = options . allowHalfOpen || false ;
1778
1779
this . pauseOnConnect = ! ! options . pauseOnConnect ;
@@ -1954,10 +1955,14 @@ function listenInCluster(server, address, port, addressType,
1954
1955
backlog,
1955
1956
...options ,
1956
1957
} ;
1958
+ const listeningId = server . _listeningId ;
1957
1959
// Get the primary's server handle, and listen on it
1958
1960
cluster . _getServer ( server , serverQuery , listenOnPrimaryHandle ) ;
1959
-
1960
1961
function listenOnPrimaryHandle ( err , handle ) {
1962
+ if ( listeningId !== server . _listeningId ) {
1963
+ handle . close ( ) ;
1964
+ return ;
1965
+ }
1961
1966
err = checkBindError ( err , port , handle ) ;
1962
1967
1963
1968
if ( err ) {
@@ -2089,9 +2094,14 @@ Server.prototype.listen = function(...args) {
2089
2094
throw new ERR_INVALID_ARG_VALUE ( 'options' , options ) ;
2090
2095
} ;
2091
2096
2092
- function lookupAndListen ( self , port , address , backlog , exclusive , flags ) {
2097
+ function lookupAndListen ( self , port , address , backlog ,
2098
+ exclusive , flags ) {
2093
2099
if ( dns === undefined ) dns = require ( 'dns' ) ;
2100
+ const listeningId = self . _listeningId ;
2094
2101
dns . lookup ( address , function doListen ( err , ip , addressType ) {
2102
+ if ( listeningId !== self . _listeningId ) {
2103
+ return ;
2104
+ }
2095
2105
if ( err ) {
2096
2106
self . emit ( 'error' , err ) ;
2097
2107
} else {
@@ -2237,6 +2247,7 @@ Server.prototype.getConnections = function(cb) {
2237
2247
2238
2248
2239
2249
Server . prototype . close = function ( cb ) {
2250
+ this . _listeningId ++ ;
2240
2251
if ( typeof cb === 'function' ) {
2241
2252
if ( ! this . _handle ) {
2242
2253
this . once ( 'close' , function close ( ) {
0 commit comments