From 8c32721aa93c7537f9e31749c2fd3c247e2de2bf Mon Sep 17 00:00:00 2001 From: Gardient Date: Sat, 10 Nov 2018 23:51:32 +0200 Subject: [PATCH] add gracefully shut down server --- httpserver.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 httpserver.go diff --git a/httpserver.go b/httpserver.go new file mode 100644 index 0000000..fe6147b --- /dev/null +++ b/httpserver.go @@ -0,0 +1,38 @@ +package utils + +import ( + "context" + "log" + "net/http" + "os" + "os/signal" + "time" +) + +// StartHTTPServer cct +func StartHTTPServer(address string, handler http.HandlerFunc) { + stop := make(chan os.Signal, 1) + + signal.Notify(stop, os.Interrupt) + + srv := &http.Server{Addr: address} + + http.HandleFunc("/", handler) + + go func() { + log.Print("listening on http://" + address) + + if err := srv.ListenAndServe(); err != nil { + log.Fatal(err) + } + }() + + <-stop + + log.Print("Shutting down...") + ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) + + srv.Shutdown(ctx) + + log.Print("Shut Down") +}