From 49c1e3df55175b2942ad091df86272903cf709da Mon Sep 17 00:00:00 2001 From: Julien Salleyron Date: Fri, 14 Aug 2020 11:03:58 +0200 Subject: [PATCH] Fix server shutdown --- pkg/server/server_entrypoint_tcp.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/server/server_entrypoint_tcp.go b/pkg/server/server_entrypoint_tcp.go index bf8a5315b3..3b7efdf4c8 100644 --- a/pkg/server/server_entrypoint_tcp.go +++ b/pkg/server/server_entrypoint_tcp.go @@ -28,12 +28,14 @@ var httpServerLogger = stdlog.New(log.WithoutContext().WriterLevel(logrus.DebugL type httpForwarder struct { net.Listener connChan chan net.Conn + errChan chan error } func newHTTPForwarder(ln net.Listener) *httpForwarder { return &httpForwarder{ Listener: ln, connChan: make(chan net.Conn), + errChan: make(chan error), } } @@ -44,8 +46,12 @@ func (h *httpForwarder) ServeTCP(conn tcp.WriteCloser) { // Accept retrieves a served connection in ServeTCP. func (h *httpForwarder) Accept() (net.Conn, error) { - conn := <-h.connChan - return conn, nil + select { + case conn := <-h.connChan: + return conn, nil + case err := <-h.errChan: + return nil, err + } } // TCPEntryPoints holds a map of TCPEntryPoint (the entrypoint names being the keys). @@ -169,7 +175,8 @@ func (e *TCPEntryPoint) Start(ctx context.Context) { if netErr, ok := err.(net.Error); ok && netErr.Temporary() { continue } - + e.httpServer.Forwarder.errChan <- err + e.httpsServer.Forwarder.errChan <- err return }