Skip to content

Commit 82b0761

Browse files
refactor(libp2p): use precise connection cleanup in handshake error handling (#5330)
1 parent 309539c commit 82b0761

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

pkg/p2p/libp2p/libp2p.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ func (s *Service) handleIncoming(stream network.Stream) {
607607
s.logger.Debug("stream handler: handshake: build remote multiaddrs", "peer_id", peerID, "error", err)
608608
s.logger.Error(nil, "stream handler: handshake: build remote multiaddrs", "peer_id", peerID)
609609
_ = handshakeStream.Reset()
610-
_ = s.host.Network().ClosePeer(peerID)
610+
_ = stream.Conn().Close()
611611
return
612612
}
613613

@@ -622,7 +622,7 @@ func (s *Service) handleIncoming(stream network.Stream) {
622622
s.logger.Debug("stream handler: handshake: build remote multiaddrs fallback", "peer_id", peerID, "error", err)
623623
s.logger.Error(nil, "stream handler: handshake: build remote multiaddrs fallback", "peer_id", peerID)
624624
_ = handshakeStream.Reset()
625-
_ = s.host.Network().ClosePeer(peerID)
625+
_ = stream.Conn().Close()
626626
return
627627
}
628628
}
@@ -636,7 +636,7 @@ func (s *Service) handleIncoming(stream network.Stream) {
636636
s.logger.Debug("stream handler: handshake: handle failed", "peer_id", peerID, "error", err)
637637
s.logger.Error(nil, "stream handler: handshake: handle failed", "peer_id", peerID)
638638
_ = handshakeStream.Reset()
639-
_ = s.host.Network().ClosePeer(peerID)
639+
_ = stream.Conn().Close()
640640
return
641641
}
642642

@@ -1121,7 +1121,7 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
11211121
peerAddrs, err := s.peerMultiaddrs(ctx, peerID)
11221122
if err != nil {
11231123
_ = handshakeStream.Reset()
1124-
_ = s.host.Network().ClosePeer(peerID)
1124+
_ = stream.Conn().Close()
11251125
return nil, fmt.Errorf("build peer multiaddrs: %w", err)
11261126
}
11271127

@@ -1130,7 +1130,7 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
11301130
observedAddrs, err = buildFullMAs([]ma.Multiaddr{stream.Conn().RemoteMultiaddr()}, peerID)
11311131
if err != nil {
11321132
_ = handshakeStream.Reset()
1133-
_ = s.host.Network().ClosePeer(peerID)
1133+
_ = stream.Conn().Close()
11341134
return nil, fmt.Errorf("build peer multiaddrs fallback: %w", err)
11351135
}
11361136
}
@@ -1142,13 +1142,13 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
11421142
)
11431143
if err != nil {
11441144
_ = handshakeStream.Reset()
1145-
_ = s.host.Network().ClosePeer(info.ID)
1145+
_ = stream.Conn().Close()
11461146
return nil, fmt.Errorf("handshake: %w", err)
11471147
}
11481148

11491149
if !i.FullNode {
11501150
_ = handshakeStream.Reset()
1151-
_ = s.host.Network().ClosePeer(info.ID)
1151+
_ = stream.Conn().Close()
11521152
return nil, p2p.ErrDialLightNode
11531153
}
11541154

@@ -1159,7 +1159,7 @@ func (s *Service) Connect(ctx context.Context, addrs []ma.Multiaddr) (address *b
11591159
s.logger.Debug("blocklisting: exists failed", "peer_id", info.ID, "error", err)
11601160
s.logger.Error(nil, "internal error while connecting with peer", "peer_id", info.ID)
11611161
_ = handshakeStream.Reset()
1162-
_ = s.host.Network().ClosePeer(info.ID)
1162+
_ = stream.Conn().Close()
11631163
return nil, err
11641164
}
11651165

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

11731173
if exists := s.peers.addIfNotExists(stream.Conn(), overlay, i.FullNode); exists {
11741174
if err := handshakeStream.FullClose(); err != nil {
1175-
_ = s.Disconnect(overlay, "failed closing handshake stream after connect")
1175+
// Only close the new (duplicate) connection; keep existing healthy sessions intact.
1176+
_ = stream.Conn().Close()
11761177
return nil, fmt.Errorf("peer exists, full close: %w", err)
11771178
}
11781179

0 commit comments

Comments
 (0)