Merge pull request #307 from mrd0ll4r/fixHttpShutdown

http: fix HTTP shutdown panicking
This commit is contained in:
mrd0ll4r 2017-04-05 09:08:09 +02:00 committed by GitHub
commit 9f45950dd0
2 changed files with 6 additions and 7 deletions

View file

@ -124,7 +124,7 @@ func rootCmdRun(cmd *cobra.Command, args []string) error {
close(shutdown) close(shutdown)
closed = true closed = true
} else { } else {
log.Infoln(bufErr) log.Errorln(bufErr)
} }
bufErr = err bufErr = err
} }
@ -175,7 +175,7 @@ func startFrontends(httpConfig httpfrontend.Config, udpConfig udpfrontend.Config
go func() { go func() {
log.Infoln("started serving HTTP on", httpConfig.Addr) log.Infoln("started serving HTTP on", httpConfig.Addr)
if err := httpFrontend.ListenAndServe(); err != nil { if err := httpFrontend.ListenAndServe(); err != nil {
errChan <- errors.New("failed to cleanly shutdown HTTP frontend: " + err.Error()) errChan <- err
} }
}() }()
} }
@ -186,7 +186,7 @@ func startFrontends(httpConfig httpfrontend.Config, udpConfig udpfrontend.Config
go func() { go func() {
log.Infoln("started serving UDP on", udpConfig.Addr) log.Infoln("started serving UDP on", udpConfig.Addr)
if err := udpFrontend.ListenAndServe(); err != nil { if err := udpFrontend.ListenAndServe(); err != nil {
errChan <- errors.New("failed to cleanly shutdown UDP frontend: " + err.Error()) errChan <- err
} }
}() }()
} }

View file

@ -5,6 +5,7 @@ package http
import ( import (
"context" "context"
"crypto/tls" "crypto/tls"
"errors"
"net" "net"
"net/http" "net/http"
"time" "time"
@ -144,10 +145,8 @@ func (t *Frontend) ListenAndServe() error {
} }
// Start the HTTP server and gracefully handle any network errors. // Start the HTTP server and gracefully handle any network errors.
if err := t.s.ListenAndServe(); err != nil { if err := t.s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
if opErr, ok := err.(*net.OpError); !ok || (ok && opErr.Op != "accept") { return errors.New("http: failed to run HTTP server: " + err.Error())
panic("http: failed to gracefully run HTTP server: " + err.Error())
}
} }
return nil return nil