From a9d5bd7334dda79bb5713c2f7fabaf0b07b51f0c Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Thu, 13 Jun 2013 08:33:20 -0700 Subject: [PATCH] Print accept errors, sleep on tmp ones --- server/const.go | 4 ++++ server/server.go | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/server/const.go b/server/const.go index 313adf24..5895b4a9 100644 --- a/server/const.go +++ b/server/const.go @@ -40,4 +40,8 @@ const ( DEFAULT_FLUSH_DEADLINE = 500 * time.Millisecond DEFAULT_HTTP_PORT = 8333 + + // Accept sleep times on temporary errors + ACCEPT_MIN_SLEEP = 10 * time.Millisecond + ACCEPT_MAX_SLEEP = 1 * time.Second ) diff --git a/server/server.go b/server/server.go index 271c1352..7b07c96c 100644 --- a/server/server.go +++ b/server/server.go @@ -173,14 +173,25 @@ func (s *Server) AcceptLoop() { s.running = true s.mu.Unlock() + tmpDelay := ACCEPT_MIN_SLEEP + for s.isRunning() { conn, err := l.Accept() if err != nil { if ne, ok := err.(net.Error); ok && ne.Temporary() { + Debug("Temporary Accept Error(%v), sleeping %dms", + ne, tmpDelay/time.Millisecond) + time.Sleep(tmpDelay) + tmpDelay *= 2 + if tmpDelay > ACCEPT_MAX_SLEEP { + tmpDelay = ACCEPT_MAX_SLEEP + } + } else { Logf("Accept error: %v", err) } continue } + tmpDelay = ACCEPT_MIN_SLEEP s.createClient(conn) } s.done <- true