diff options
author | obscuren <geffobscura@gmail.com> | 2014-01-18 00:14:59 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-01-18 00:14:59 +0800 |
commit | 87434a09418e6cc2dd4b92d7e35afc6f155994bc (patch) | |
tree | 76914e772618c2d31050ef63fbc3ea589a6a30d1 | |
parent | ddf82c333702e22d3cd7e5c693ad0603089a57a4 (diff) | |
download | go-tangerine-87434a09418e6cc2dd4b92d7e35afc6f155994bc.tar.gz go-tangerine-87434a09418e6cc2dd4b92d7e35afc6f155994bc.tar.zst go-tangerine-87434a09418e6cc2dd4b92d7e35afc6f155994bc.zip |
Ping pong message
-rw-r--r-- | peer.go | 8 | ||||
-rw-r--r-- | server.go | 4 |
2 files changed, 9 insertions, 3 deletions
@@ -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": @@ -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) |