diff --git a/packages/libp2p/src/connection-manager/index.ts b/packages/libp2p/src/connection-manager/index.ts index 08bb4126d3..607f0c23f5 100644 --- a/packages/libp2p/src/connection-manager/index.ts +++ b/packages/libp2p/src/connection-manager/index.ts @@ -532,7 +532,7 @@ export class DefaultConnectionManager implements ConnectionManager, Startable { } // make sure we don't already have a connection to this multiaddr - if (conn.id !== connection.id && conn.remoteAddr.equals(connection.remoteAddr)) { + if (options.force !== true && conn.id !== connection.id && conn.remoteAddr.equals(connection.remoteAddr)) { connection.abort(new InvalidMultiaddrError('Duplicate multiaddr connection')) // return the existing connection diff --git a/packages/libp2p/test/connection-manager/index.spec.ts b/packages/libp2p/test/connection-manager/index.spec.ts index d58b82d5bb..6a500e264e 100644 --- a/packages/libp2p/test/connection-manager/index.spec.ts +++ b/packages/libp2p/test/connection-manager/index.spec.ts @@ -529,10 +529,13 @@ describe('Connection Manager', () => { const existingConnection = stubInterface({ limits: { bytes: 100n - } + }, + remotePeer: targetPeer, + remoteAddr: multiaddr(`/ip4/123.123.123.123/tcp/123/p2p-circuit/p2p/${targetPeer}`) }) const newConnection = stubInterface({ - remotePeer: targetPeer + remotePeer: targetPeer, + remoteAddr: addr }) sinon.stub(connectionManager.dialQueue, 'dial')