From 9aebcd362ea4fc7c70e49f95812b0ba803897f12 Mon Sep 17 00:00:00 2001 From: Adnan Maolood Date: Mon, 22 Feb 2021 21:14:41 -0500 Subject: [PATCH] examples/server: Shutdown on interrupt signal --- examples/server.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/examples/server.go b/examples/server.go index a0ec3a7..a72a8aa 100644 --- a/examples/server.go +++ b/examples/server.go @@ -8,6 +8,7 @@ import ( "context" "log" "os" + "os/signal" "time" "git.sr.ht/~adnano/go-gemini" @@ -31,7 +32,26 @@ func main() { GetCertificate: certificates.GetCertificate, } - if err := server.ListenAndServe(context.Background()); err != nil { + // Listen for interrupt signal + c := make(chan os.Signal, 1) + signal.Notify(c, os.Interrupt) + + errch := make(chan error) + go func() { + ctx := context.Background() + errch <- server.ListenAndServe(ctx) + }() + + select { + case err := <-errch: log.Fatal(err) + case <-c: + // Shutdown the server + log.Println("Shutting down...") + ctx, _ := context.WithTimeout(context.Background(), 30*time.Second) + err := server.Shutdown(ctx) + if err != nil { + log.Fatal(err) + } } }