diff --git a/packages/gossip/errors.go b/packages/gossip/errors.go index 85e43340fe2f4be0cf91f95de18b21b378d0bb61..554e38618c97aff2cda1b3c97cc3cbd805a6888d 100644 --- a/packages/gossip/errors.go +++ b/packages/gossip/errors.go @@ -6,6 +6,7 @@ var ( ErrNotStarted = errors.New("manager not started") ErrClosed = errors.New("manager closed") ErrNotANeighbor = errors.New("peer is not a neighbor") + ErrLoopback = errors.New("loopback connection not allowed") ErrDuplicateNeighbor = errors.New("peer already connected") ErrInvalidPacket = errors.New("invalid packet") ) diff --git a/packages/gossip/manager.go b/packages/gossip/manager.go index 03bcb475025475996c3b494bc862981099ba9b71..683cd24c966051d67b55cb91f8387fbbc457abd0 100644 --- a/packages/gossip/manager.go +++ b/packages/gossip/manager.go @@ -78,6 +78,9 @@ func (m *Manager) LocalAddr() net.Addr { // AddOutbound tries to add a neighbor by connecting to that peer. func (m *Manager) AddOutbound(p *peer.Peer) error { + if p.ID() == m.local.ID() { + return ErrLoopback + } var srv *server.TCP m.mu.RLock() if m.srv == nil { @@ -91,6 +94,9 @@ func (m *Manager) AddOutbound(p *peer.Peer) error { // AddInbound tries to add a neighbor by accepting an incoming connection from that peer. func (m *Manager) AddInbound(p *peer.Peer) error { + if p.ID() == m.local.ID() { + return ErrLoopback + } var srv *server.TCP m.mu.RLock() if m.srv == nil {