From 45f18042b7146079a11d463341e86f25a0cda2aa Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Thu, 15 Nov 2018 19:55:13 +0000 Subject: [PATCH] make accept loop --- server/rpc_server.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/server/rpc_server.go b/server/rpc_server.go index 76393391..c55908ab 100644 --- a/server/rpc_server.go +++ b/server/rpc_server.go @@ -397,11 +397,34 @@ func (s *rpcServer) Start() error { s.opts.Address = ts.Addr() s.Unlock() - go ts.Accept(s.accept) + exit := make(chan bool, 1) + + go func() { + for { + err := ts.Accept(s.accept) + + // check if we're supposed to exit + select { + case <-exit: + return + default: + } + + // check the error and backoff + if err != nil { + log.Logf("Accept error: %v", err) + time.Sleep(time.Second) + } + + // no error just exit + return + } + }() go func() { // wait for exit ch := <-s.exit + exit <- true // wait for requests to finish if wait(s.opts.Context) {