Skip to content

Commit bb6cb0e

Browse files
refactor(libp2p): use precise connection cleanup in handshake error handling
1 parent 26530f1 commit bb6cb0e

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

pkg/p2p/libp2p/libp2p.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ func (s *Service) handleIncoming(stream network.Stream) {
651651
s.logger.Debug("stream handler: handshake: build remote multiaddrs", "peer_id", peerID, "error", err)
652652
s.logger.Error(nil, "stream handler: handshake: build remote multiaddrs", "peer_id", peerID)
653653
_ = handshakeStream.Reset()
654-
_ = s.host.Network().ClosePeer(peerID)
654+
_ = stream.Conn().Close()
655655
return
656656
}
657657

@@ -665,7 +665,7 @@ func (s *Service) handleIncoming(stream network.Stream) {
665665
s.logger.Debug("stream handler: handshake: handle failed", "peer_id", peerID, "error", err)
666666
s.logger.Error(nil, "stream handler: handshake: handle failed", "peer_id", peerID)
667667
_ = handshakeStream.Reset()
668-
_ = s.host.Network().ClosePeer(peerID)
668+
_ = stream.Conn().Close()
669669
return
670670
}
671671

@@ -1066,7 +1066,7 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
10661066
peerMultiaddrs, err := s.peerMultiaddrs(ctx, peerID)
10671067
if err != nil {
10681068
_ = handshakeStream.Reset()
1069-
_ = s.host.Network().ClosePeer(peerID)
1069+
_ = stream.Conn().Close()
10701070
return nil, fmt.Errorf("build peer multiaddrs: %w", err)
10711071
}
10721072

@@ -1078,13 +1078,13 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
10781078
)
10791079
if err != nil {
10801080
_ = handshakeStream.Reset()
1081-
_ = s.host.Network().ClosePeer(info.ID)
1081+
_ = stream.Conn().Close()
10821082
return nil, fmt.Errorf("handshake: %w", err)
10831083
}
10841084

10851085
if !i.FullNode {
10861086
_ = handshakeStream.Reset()
1087-
_ = s.host.Network().ClosePeer(info.ID)
1087+
_ = stream.Conn().Close()
10881088
return nil, p2p.ErrDialLightNode
10891089
}
10901090

@@ -1095,7 +1095,7 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
10951095
s.logger.Debug("blocklisting: exists failed", "peer_id", info.ID, "error", err)
10961096
s.logger.Error(nil, "internal error while connecting with peer", "peer_id", info.ID)
10971097
_ = handshakeStream.Reset()
1098-
_ = s.host.Network().ClosePeer(info.ID)
1098+
_ = stream.Conn().Close()
10991099
return nil, err
11001100
}
11011101

@@ -1108,7 +1108,8 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
11081108

11091109
if exists := s.peers.addIfNotExists(stream.Conn(), overlay, i.FullNode); exists {
11101110
if err := handshakeStream.FullClose(); err != nil {
1111-
_ = s.Disconnect(overlay, "failed closing handshake stream after connect")
1111+
// Only close the new (duplicate) connection; keep existing healthy sessions intact.
1112+
_ = stream.Conn().Close()
11121113
return nil, fmt.Errorf("peer exists, full close: %w", err)
11131114
}
11141115

0 commit comments

Comments
 (0)