File tree Expand file tree Collapse file tree 2 files changed +33
-2
lines changed Expand file tree Collapse file tree 2 files changed +33
-2
lines changed Original file line number Diff line number Diff line change @@ -40,6 +40,7 @@ export class LocalDiscovery extends TypedEmitter {
40
40
/** @type {(e: Error) => void } */
41
41
#handleSocketError
42
42
#l
43
+ #port = 0
43
44
44
45
/**
45
46
* @param {Object } opts
@@ -76,9 +77,19 @@ export class LocalDiscovery extends TypedEmitter {
76
77
/** @returns {Promise<void> } */
77
78
async #start( ) {
78
79
// Let OS choose port, listen on ip4, all interfaces
79
- this . #server. listen ( 0 , '0.0.0.0' )
80
- await once ( this . #server, 'listening' )
80
+ const onListening = once ( this . #server, 'listening' )
81
+
82
+ try {
83
+ this . #server. listen ( this . #port, '0.0.0.0' )
84
+ await onListening
85
+ } catch ( e ) {
86
+ if ( this . #port === 0 ) throw e
87
+ // Account for errors from re-binding the port failing
88
+ this . #port = 0
89
+ return this . #start( )
90
+ }
81
91
const addr = getAddress ( this . #server)
92
+ this . #port = addr . port
82
93
this . #log( 'server listening on port ' + addr . port )
83
94
}
84
95
Original file line number Diff line number Diff line change @@ -471,6 +471,26 @@ test('Consistent storage folders', async () => {
471
471
)
472
472
} )
473
473
474
+ test ( 'Reusing port after start/stop of discovery' , async ( t ) => {
475
+ const manager = new MapeoManager ( {
476
+ rootKey : KeyManager . generateRootKey ( ) ,
477
+ projectMigrationsFolder,
478
+ clientMigrationsFolder,
479
+ dbFolder : ':memory:' ,
480
+ coreStorage : ( ) => new RAM ( ) ,
481
+ fastify : Fastify ( ) ,
482
+ } )
483
+
484
+ t . after ( ( ) => manager . stopLocalPeerDiscoveryServer ( ) )
485
+
486
+ const { port } = await manager . startLocalPeerDiscoveryServer ( )
487
+
488
+ await manager . stopLocalPeerDiscoveryServer ( { force : true } )
489
+
490
+ const { port : newPort } = await manager . startLocalPeerDiscoveryServer ( )
491
+ assert . equal ( newPort , port , 'Port got reused' )
492
+ } )
493
+
474
494
/**
475
495
* Generate a deterministic random bytes
476
496
*
You can’t perform that action at this time.
0 commit comments