From 4125e9eaa4d531dbcb0f2777149d1ca8fa9460a5 Mon Sep 17 00:00:00 2001 From: Alex Potsides Date: Sat, 5 Nov 2022 14:29:11 +0000 Subject: [PATCH 1/2] fix: handle listen error (#224) The `net.Server` `.listen` callback is not a node-style callback that gets passed an error, it's a listener for the `listen` event. To handle errors when `.listen`ing, one must listen for the `error` event, so update the code to do that and add a test to prevent regressions. --- src/listener.ts | 8 ++++---- test/listen-dial.spec.ts | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/listener.ts b/src/listener.ts index 63dafed..05e31dc 100644 --- a/src/listener.ts +++ b/src/listener.ts @@ -155,10 +155,10 @@ export class TCPListener extends EventEmitter implements Listene return await new Promise((resolve, reject) => { const options = multiaddrToNetConfig(listeningAddr) - this.server.listen(options, (err?: any) => { - if (err != null) { - return reject(err) - } + this.server.on('error', (err) => { + reject(err) + }) + this.server.listen(options, () => { log('Listening on %s', this.server.address()) resolve() }) diff --git a/test/listen-dial.spec.ts b/test/listen-dial.spec.ts index 7a9e720..59bfb3a 100644 --- a/test/listen-dial.spec.ts +++ b/test/listen-dial.spec.ts @@ -47,6 +47,22 @@ describe('listen', () => { await listener.listen(mh) }) + it('errors when listening on busy port', async () => { + const mh = multiaddr('/ip4/127.0.0.1/tcp/0') + listener = transport.createListener({ + upgrader + }) + await listener.listen(mh) + + const listener2 = transport.createListener({ + upgrader + }) + + const mh2 = listener.getAddrs()[0] + await expect(listener2.listen(mh2)).to.eventually.be.rejected() + .with.property('code', 'EADDRINUSE') + }) + it('listen on IPv6 addr', async () => { if (isCI != null) { return From 73240c42dd30d2f7b8362baabffd71f4bae130b6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 5 Nov 2022 14:34:47 +0000 Subject: [PATCH 2/2] chore(release): 5.0.2 [skip ci] ## [5.0.2](https://github.com/libp2p/js-libp2p-tcp/compare/v5.0.1...v5.0.2) (2022-11-05) ### Bug Fixes * handle listen error ([#224](https://github.com/libp2p/js-libp2p-tcp/issues/224)) ([4125e9e](https://github.com/libp2p/js-libp2p-tcp/commit/4125e9eaa4d531dbcb0f2777149d1ca8fa9460a5)) --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c799e7..40202c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [5.0.2](https://github.com/libp2p/js-libp2p-tcp/compare/v5.0.1...v5.0.2) (2022-11-05) + + +### Bug Fixes + +* handle listen error ([#224](https://github.com/libp2p/js-libp2p-tcp/issues/224)) ([4125e9e](https://github.com/libp2p/js-libp2p-tcp/commit/4125e9eaa4d531dbcb0f2777149d1ca8fa9460a5)) + ## [5.0.1](https://github.com/libp2p/js-libp2p-tcp/compare/v5.0.0...v5.0.1) (2022-10-17) diff --git a/package.json b/package.json index 0563038..ebe277e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@libp2p/tcp", - "version": "5.0.1", + "version": "5.0.2", "description": "Node.js implementation of the TCP module that libp2p uses, which implements the interface-connection and interface-transport interfaces", "license": "Apache-2.0 OR MIT", "homepage": "https://github.com/libp2p/js-libp2p-tcp#readme",