From 87434a09418e6cc2dd4b92d7e35afc6f155994bc Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 17 Jan 2014 17:14:59 +0100 Subject: [PATCH] Ping pong message --- peer.go | 8 +++++++- server.go | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/peer.go b/peer.go index d876205e21..76a810063b 100644 --- a/peer.go +++ b/peer.go @@ -34,6 +34,9 @@ type Peer struct { // This flag is used by writeMessage to check if messages are allowed // to be send or not. If no version is known all messages are ignored. versionKnown bool + + // Last received pong message + lastPong int64 } func NewPeer(conn net.Conn, server *Server, inbound bool) *Peer { @@ -109,7 +112,7 @@ func (p *Peer) writeMessage(msg *ethwire.InOutMsg) { // Outbound message handler. Outbound messages are handled here func (p *Peer) HandleOutbound() { // The ping timer. Makes sure that every 2 minutes a ping is send to the peer - tickleTimer := time.NewTimer(2 * time.Minute) + tickleTimer := time.NewTicker(2 * time.Minute) out: for { select { @@ -173,7 +176,10 @@ out: case ethwire.MsgGetPeersTy: case ethwire.MsgPeersTy: case ethwire.MsgPingTy: + // Respond back with pong + p.writeMessage(ðwire.InOutMsg{Type: ethwire.MsgPongTy}) case ethwire.MsgPongTy: + p.lastPong = time.Now().Unix() /* case "blockmine": diff --git a/server.go b/server.go index f17cc32a01..9907f3b24a 100644 --- a/server.go +++ b/server.go @@ -81,13 +81,13 @@ func (s *Server) Broadcast(msgType ethwire.MsgType, data []byte) { } const ( - processReapingTimeout = 10 // TODO increase + processReapingTimeout = 1 // TODO increase ) func (s *Server) ReapDeadPeers() { for { eachPeer(s.peers, func(p *Peer, e *list.Element) { - if atomic.LoadInt32(&p.disconnect) == 1 { + if atomic.LoadInt32(&p.disconnect) == 1 || (p.inbound && (time.Now().Unix()-p.lastPong) > int64(5*time.Minute)) { log.Println("Dead peer found .. reaping") s.peers.Remove(e)