diff --git a/pkg/p2p/libp2p/libp2p.go b/pkg/p2p/libp2p/libp2p.go index 6bab9b8214c..d78833f76c2 100644 --- a/pkg/p2p/libp2p/libp2p.go +++ b/pkg/p2p/libp2p/libp2p.go @@ -651,7 +651,7 @@ func (s *Service) handleIncoming(stream network.Stream) { s.logger.Debug("stream handler: handshake: build remote multiaddrs", "peer_id", peerID, "error", err) s.logger.Error(nil, "stream handler: handshake: build remote multiaddrs", "peer_id", peerID) _ = handshakeStream.Reset() - _ = s.host.Network().ClosePeer(peerID) + _ = stream.Conn().Close() return } @@ -665,7 +665,7 @@ func (s *Service) handleIncoming(stream network.Stream) { s.logger.Debug("stream handler: handshake: handle failed", "peer_id", peerID, "error", err) s.logger.Error(nil, "stream handler: handshake: handle failed", "peer_id", peerID) _ = handshakeStream.Reset() - _ = s.host.Network().ClosePeer(peerID) + _ = stream.Conn().Close() return } @@ -1066,7 +1066,7 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b peerMultiaddrs, err := s.peerMultiaddrs(ctx, peerID) if err != nil { _ = handshakeStream.Reset() - _ = s.host.Network().ClosePeer(peerID) + _ = stream.Conn().Close() return nil, fmt.Errorf("build peer multiaddrs: %w", err) } @@ -1078,13 +1078,13 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b ) if err != nil { _ = handshakeStream.Reset() - _ = s.host.Network().ClosePeer(info.ID) + _ = stream.Conn().Close() return nil, fmt.Errorf("handshake: %w", err) } if !i.FullNode { _ = handshakeStream.Reset() - _ = s.host.Network().ClosePeer(info.ID) + _ = stream.Conn().Close() return nil, p2p.ErrDialLightNode } @@ -1095,7 +1095,7 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b s.logger.Debug("blocklisting: exists failed", "peer_id", info.ID, "error", err) s.logger.Error(nil, "internal error while connecting with peer", "peer_id", info.ID) _ = handshakeStream.Reset() - _ = s.host.Network().ClosePeer(info.ID) + _ = stream.Conn().Close() return nil, err } @@ -1108,7 +1108,8 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b if exists := s.peers.addIfNotExists(stream.Conn(), overlay, i.FullNode); exists { if err := handshakeStream.FullClose(); err != nil { - _ = s.Disconnect(overlay, "failed closing handshake stream after connect") + // Only close the new (duplicate) connection; keep existing healthy sessions intact. + _ = stream.Conn().Close() return nil, fmt.Errorf("peer exists, full close: %w", err) }