From 3ef52775c4756b7cbdc28b807eb4600127a9a873 Mon Sep 17 00:00:00 2001
From: Martin Holst Swende <martin@swende.se>
Date: Fri, 20 Nov 2020 15:14:25 +0100
Subject: [PATCH] p2p: avoid spinning loop on out-of-handles (#21878)

* p2p: avoid busy-loop on temporary errors

* p2p: address review concerns
---
 p2p/server.go | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/p2p/server.go b/p2p/server.go
index dd52297f8..275cb5ea5 100644
--- a/p2p/server.go
+++ b/p2p/server.go
@@ -854,13 +854,18 @@ func (srv *Server) listenLoop() {
 		<-slots
 
 		var (
-			fd  net.Conn
-			err error
+			fd      net.Conn
+			err     error
+			lastLog time.Time
 		)
 		for {
 			fd, err = srv.listener.Accept()
 			if netutil.IsTemporaryError(err) {
-				srv.log.Debug("Temporary read error", "err", err)
+				if time.Since(lastLog) > 1*time.Second {
+					srv.log.Debug("Temporary read error", "err", err)
+					lastLog = time.Now()
+				}
+				time.Sleep(time.Millisecond * 200)
 				continue
 			} else if err != nil {
 				srv.log.Debug("Read error", "err", err)
-- 
GitLab