p2p/discover: continue reading after temporary errors
Might solve #1579
This commit is contained in:
parent
3b997c3e16
commit
7d5ff770e2
@ -458,6 +458,10 @@ func encodePacket(priv *ecdsa.PrivateKey, ptype byte, req interface{}) ([]byte,
|
|||||||
return packet, nil
|
return packet, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type tempError interface {
|
||||||
|
Temporary() bool
|
||||||
|
}
|
||||||
|
|
||||||
// readLoop runs in its own goroutine. it handles incoming UDP packets.
|
// readLoop runs in its own goroutine. it handles incoming UDP packets.
|
||||||
func (t *udp) readLoop() {
|
func (t *udp) readLoop() {
|
||||||
defer t.conn.Close()
|
defer t.conn.Close()
|
||||||
@ -467,7 +471,13 @@ func (t *udp) readLoop() {
|
|||||||
buf := make([]byte, 1280)
|
buf := make([]byte, 1280)
|
||||||
for {
|
for {
|
||||||
nbytes, from, err := t.conn.ReadFromUDP(buf)
|
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
|
return
|
||||||
}
|
}
|
||||||
t.handlePacket(from, buf[:nbytes])
|
t.handlePacket(from, buf[:nbytes])
|
||||||
|
Loading…
Reference in New Issue
Block a user