aboutsummaryrefslogtreecommitdiff
path: root/examples/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'examples/server.go')
-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)
+ }
}
}