aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAdnan Maolood <[email protected]>2021-02-22 21:14:41 -0500
committerAdnan Maolood <[email protected]>2021-02-22 21:14:41 -0500
commit9aebcd362ea4fc7c70e49f95812b0ba803897f12 (patch)
tree996e67e7811333f44f28b615acacb4edfd3582f6 /examples
parentserver: Revert to closing contexts on Shutdown (diff)
downloadgo-gemini-9aebcd362ea4fc7c70e49f95812b0ba803897f12.tar.xz
go-gemini-9aebcd362ea4fc7c70e49f95812b0ba803897f12.zip
examples/server: Shutdown on interrupt signal
Diffstat (limited to 'examples')
-rw-r--r--examples/server.go22
1 files changed, 21 insertions, 1 deletions
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)
+ }
}
}