From 0b1fc43f88df082609d86b0f307c8c004d7d99e7 Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Fri, 17 Apr 2015 20:10:57 -0700 Subject: [PATCH] If Accept() fails due to a closing listener, return Other types of Accept() failures should result in a retry. --- graphite/graphite_tcp.go | 6 +++++- opentsdb/opentsdb.go | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/graphite/graphite_tcp.go b/graphite/graphite_tcp.go index c29bb41f63..b3ea382933 100644 --- a/graphite/graphite_tcp.go +++ b/graphite/graphite_tcp.go @@ -52,9 +52,13 @@ func (t *TCPServer) ListenAndServe(iface string) error { defer t.wg.Done() for { conn, err := ln.Accept() + if opErr, ok := err.(*net.OpError); ok && !opErr.Temporary() { + t.Logger.Println("graphite TCP listener closed") + return + } if err != nil { t.Logger.Println("error accepting TCP connection", err.Error()) - return + continue } t.wg.Add(1) diff --git a/opentsdb/opentsdb.go b/opentsdb/opentsdb.go index 600f6ae504..16f7e2175e 100644 --- a/opentsdb/opentsdb.go +++ b/opentsdb/opentsdb.go @@ -73,9 +73,13 @@ func (s *Server) ListenAndServe(listenAddress string) { defer s.wg.Done() for { conn, err := s.listener.Accept() + if opErr, ok := err.(*net.OpError); ok && !opErr.Temporary() { + log.Println("openTSDB TCP listener closed") + return + } if err != nil { log.Println("error accepting openTSDB: ", err.Error()) - return + continue } s.wg.Add(1) go s.HandleConnection(conn)