diff --git a/packages/client/lib/net/server/rlpxserver.ts b/packages/client/lib/net/server/rlpxserver.ts index eb1091110c2..576a0cf0af1 100644 --- a/packages/client/lib/net/server/rlpxserver.ts +++ b/packages/client/lib/net/server/rlpxserver.ts @@ -117,7 +117,7 @@ export class RlpxServer extends Server { return false } await super.start() - this.initDpt() + await this.initDpt() await this.initRlpx() this.started = true @@ -205,26 +205,32 @@ export class RlpxServer extends Server { * Initializes DPT for peer discovery * @private */ - initDpt() { - this.dpt = new Devp2pDPT(this.key, { - refreshInterval: this.refreshInterval, - endpoint: { - address: '0.0.0.0', - udpPort: null, - tcpPort: null, - }, - shouldFindNeighbours: this.config.discV4, - shouldGetDnsPeers: this.config.discDns, - dnsRefreshQuantity: this.config.maxPeers, - dnsNetworks: this.dnsNetworks, - dnsAddr: this.config.dnsAddr, - }) + async initDpt() { + return new Promise((resolve) => { + this.dpt = new Devp2pDPT(this.key, { + refreshInterval: this.refreshInterval, + endpoint: { + address: '0.0.0.0', + udpPort: null, + tcpPort: null, + }, + shouldFindNeighbours: this.config.discV4, + shouldGetDnsPeers: this.config.discDns, + dnsRefreshQuantity: this.config.maxPeers, + dnsNetworks: this.dnsNetworks, + dnsAddr: this.config.dnsAddr, + }) - this.dpt.on('error', (e: Error) => this.error(e)) + this.dpt.on('error', (e: Error) => this.error(e)) - if (this.config.port) { - this.dpt.bind(this.config.port, '0.0.0.0') - } + this.dpt.on('listening', () => { + resolve() + }) + + if (this.config.port) { + this.dpt.bind(this.config.port, '0.0.0.0') + } + }) } /** diff --git a/packages/client/test/net/server/rlpxserver.spec.ts b/packages/client/test/net/server/rlpxserver.spec.ts index b0fe171b0c9..0e6ca4ed513 100644 --- a/packages/client/test/net/server/rlpxserver.spec.ts +++ b/packages/client/test/net/server/rlpxserver.spec.ts @@ -179,7 +179,9 @@ tape('[RlpxServer]', async (t) => { t.plan(1) const config = new Config({ loglevel: 'error', transports: [] }) const server = new RlpxServer({ config }) - server.initDpt() + server.initDpt().catch((error) => { + throw error + }) td.verify((server.dpt as any).bind(server.config.port, '0.0.0.0')) server.on('error', (err: any) => t.equals(err, 'err0', 'got error')) ;(server.dpt as any).emit('error', 'err0')