Show more errors without -debug

Some errors should be surfaced back even without -debug: for
instance, failure to connect to the backend.
This commit is contained in:
Simon Ser 2023-01-27 11:04:36 +01:00
parent 151e7cf586
commit 84ae2e62d6
1 changed files with 8 additions and 3 deletions

View File

@ -187,6 +187,10 @@ func (srv *Server) Replace(old *Server) error {
return nil return nil
} }
type clientError struct {
error
}
type listenerHandles struct { type listenerHandles struct {
Server *Server Server *Server
Frontends map[string]*Frontend // indexed by server name Frontends map[string]*Frontend // indexed by server name
@ -259,7 +263,8 @@ func (ln *Listener) serve() error {
go func() { go func() {
err := ln.handle(conn) err := ln.handle(conn)
srv := ln.atomic.Load().(*listenerHandles).Server srv := ln.atomic.Load().(*listenerHandles).Server
if err != nil && srv.Debug { var clientErr clientError
if !errors.As(err, &clientErr) || srv.Debug {
log.Printf("listener %q: connection %q: %v", ln.Address, conn.RemoteAddr(), err) log.Printf("listener %q: connection %q: %v", ln.Address, conn.RemoteAddr(), err)
} }
}() }()
@ -301,7 +306,7 @@ func (ln *Listener) handle(conn net.Conn) error {
if err := tlsConn.Handshake(); err == io.EOF { if err := tlsConn.Handshake(); err == io.EOF {
return nil return nil
} else if err != nil { } else if err != nil {
return fmt.Errorf("TLS handshake failed: %v", err) return clientError{fmt.Errorf("TLS handshake failed: %v", err)}
} }
if err := tlsConn.SetDeadline(time.Time{}); err != nil { if err := tlsConn.SetDeadline(time.Time{}); err != nil {
return fmt.Errorf("failed to reset TLS handshake timeout: %v", err) return fmt.Errorf("failed to reset TLS handshake timeout: %v", err)
@ -385,7 +390,7 @@ func (fe *Frontend) handle(downstream net.Conn, tlsState *tls.ConnectionState) e
} }
if err := duplexCopy(upstream, downstream); err != nil { if err := duplexCopy(upstream, downstream); err != nil {
return fmt.Errorf("failed to copy bytes: %v", err) return clientError{fmt.Errorf("failed to copy bytes: %v", err)}
} }
return nil return nil
} }