@@ -82,8 +82,11 @@ export class RLPx extends EventEmitter {
8282 if ( this . _peersLRU . has ( peer . id ! . toString ( 'hex' ) ) ) return
8383 this . _peersLRU . set ( peer . id ! . toString ( 'hex' ) , true )
8484
85- if ( this . _getOpenSlots ( ) > 0 ) return this . _connectToPeer ( peer )
86- this . _peersQueue . push ( { peer : peer , ts : 0 } ) // save to queue
85+ if ( this . _getOpenSlots ( ) > 0 ) {
86+ return this . _connectToPeer ( peer )
87+ } else if ( this . _getOpenQueueSlots ( ) > 0 ) {
88+ this . _peersQueue . push ( { peer, ts : 0 } ) // save to queue
89+ }
8790 } )
8891 this . _dpt . on ( 'peer:removed' , ( peer : PeerInfo ) => {
8992 // remove from queue
@@ -177,6 +180,10 @@ export class RLPx extends EventEmitter {
177180 return Math . max ( this . _maxPeers - this . _peers . size , 0 )
178181 }
179182
183+ _getOpenQueueSlots ( ) {
184+ return this . _maxPeers * 2 - this . _peersQueue . length
185+ }
186+
180187 _connectToPeer ( peer : PeerInfo ) {
181188 this . connect ( peer ) . catch ( ( err ) => {
182189 if ( this . _dpt === null ) return
@@ -244,14 +251,16 @@ export class RLPx extends EventEmitter {
244251
245252 if ( ! disconnectWe && reason === DISCONNECT_REASONS . TOO_MANY_PEERS ) {
246253 // hack
247- this . _peersQueue . push ( {
248- peer : {
249- id : peer . getId ( ) ! ,
250- address : peer . _socket . remoteAddress ,
251- tcpPort : peer . _socket . remotePort ,
252- } ,
253- ts : ( Date . now ( ) + ms ( '5m' ) ) as number ,
254- } )
254+ if ( this . _getOpenQueueSlots ( ) > 0 ) {
255+ this . _peersQueue . push ( {
256+ peer : {
257+ id : peer . getId ( ) ! ,
258+ address : peer . _socket . remoteAddress ,
259+ tcpPort : peer . _socket . remotePort ,
260+ } ,
261+ ts : ( Date . now ( ) + ms ( '5m' ) ) as number ,
262+ } )
263+ }
255264 }
256265
257266 const id = peer . getId ( )
0 commit comments