|
|
@ -165,6 +165,8 @@ func (s *Ethereum) AddPeer(conn net.Conn) { |
|
|
|
ethutil.Config.Log.Debugf("[SERV] Max connected peers reached. Not adding incoming peer.") |
|
|
|
ethutil.Config.Log.Debugf("[SERV] Max connected peers reached. Not adding incoming peer.") |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s.reactor.Post("peerList", s.peers) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (s *Ethereum) ProcessPeerList(addrs []string) { |
|
|
|
func (s *Ethereum) ProcessPeerList(addrs []string) { |
|
|
@ -303,12 +305,26 @@ func (s *Ethereum) Peers() *list.List { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (s *Ethereum) reapPeers() { |
|
|
|
func (s *Ethereum) reapPeers() { |
|
|
|
|
|
|
|
eachPeer(s.peers, func(p *Peer, e *list.Element) { |
|
|
|
|
|
|
|
if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) { |
|
|
|
|
|
|
|
s.removePeerElement(e) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (s *Ethereum) removePeerElement(e *list.Element) { |
|
|
|
s.peerMut.Lock() |
|
|
|
s.peerMut.Lock() |
|
|
|
defer s.peerMut.Unlock() |
|
|
|
defer s.peerMut.Unlock() |
|
|
|
|
|
|
|
|
|
|
|
eachPeer(s.peers, func(p *Peer, e *list.Element) { |
|
|
|
s.peers.Remove(e) |
|
|
|
if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) { |
|
|
|
|
|
|
|
s.peers.Remove(e) |
|
|
|
s.reactor.Post("peerList", s.peers) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (s *Ethereum) RemovePeer(p *Peer) { |
|
|
|
|
|
|
|
eachPeer(s.peers, func(peer *Peer, e *list.Element) { |
|
|
|
|
|
|
|
if peer == p { |
|
|
|
|
|
|
|
s.removePeerElement(e) |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|