diff options
author | Felix Lange <fjl@twurst.com> | 2015-08-19 20:11:12 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-08-19 20:38:55 +0800 |
commit | 7d5ff770e22a3791c0f9c2794a19f59ca2756b33 (patch) | |
tree | b421e8b9c8ce776d2c1d70c9261c6a78d27fec93 | |
parent | 3b997c3e169dc3dee8f41d9ece5341ef04d7eeaf (diff) | |
download | go-tangerine-7d5ff770e22a3791c0f9c2794a19f59ca2756b33.tar.gz go-tangerine-7d5ff770e22a3791c0f9c2794a19f59ca2756b33.tar.zst go-tangerine-7d5ff770e22a3791c0f9c2794a19f59ca2756b33.zip |
p2p/discover: continue reading after temporary errors
Might solve #1579
-rw-r--r-- | p2p/discover/udp.go | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/p2p/discover/udp.go b/p2p/discover/udp.go index 008e63937..6aefb68f7 100644 --- a/p2p/discover/udp.go +++ b/p2p/discover/udp.go @@ -458,6 +458,10 @@ func encodePacket(priv *ecdsa.PrivateKey, ptype byte, req interface{}) ([]byte, return packet, nil } +type tempError interface { + Temporary() bool +} + // readLoop runs in its own goroutine. it handles incoming UDP packets. func (t *udp) readLoop() { defer t.conn.Close() @@ -467,7 +471,13 @@ func (t *udp) readLoop() { buf := make([]byte, 1280) for { nbytes, from, err := t.conn.ReadFromUDP(buf) - if err != nil { + if tempErr, ok := err.(tempError); ok && tempErr.Temporary() { + // Ignore temporary read errors. + glog.V(logger.Debug).Infof("Temporary read error: %v", err) + continue + } else if err != nil { + // Shut down the loop for permament errors. + glog.V(logger.Debug).Infof("Read error: %v", err) return } t.handlePacket(from, buf[:nbytes]) |