Add handling of SIGINT and SIGTERM

Handle exit signals so that deferred calls are executed. It's mainly
to unlink the socket before exiting.
This commit is contained in:
Krystian Chachuła 2024-07-01 19:51:12 +02:00 committed by Conrad Hoffmann
parent 42b36e3421
commit 7969df1a38

View file

@ -8,7 +8,9 @@ import (
"net" "net"
"net/http" "net/http"
"os" "os"
"os/signal"
"strings" "strings"
"syscall"
"github.com/emersion/go-webdav" "github.com/emersion/go-webdav"
"github.com/emersion/go-webdav/caldav" "github.com/emersion/go-webdav/caldav"
@ -189,12 +191,24 @@ func main() {
log.Info().Str("address", addr).Msg("starting server") log.Info().Str("address", addr).Msg("starting server")
log.Debug().Msg("debug output enabled") log.Debug().Msg("debug output enabled")
if (cert != "") && (key != "") { go func() {
err = server.ServeTLS(ln, cert, key) if (cert != "") && (key != "") {
} else { err = server.ServeTLS(ln, cert, key)
err = server.Serve(ln) } else {
} err = server.Serve(ln)
if err != http.ErrServerClosed { }
log.Fatal().Err(err).Msg("ListenAndServe() error") if err != http.ErrServerClosed {
log.Fatal().Err(err).Msg("ListenAndServe() error")
}
}()
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
for sig := range sigCh {
switch sig {
case syscall.SIGINT, syscall.SIGTERM:
server.Shutdown(context.Background())
return
}
} }
} }