]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: add example to Server.Shutdown
authorStephen McQuay (smcquay) <stephen@mcquay.me>
Sat, 15 Jul 2017 18:33:00 +0000 (12:33 -0600)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 14 Nov 2017 03:22:34 +0000 (03:22 +0000)
Fixes #19579

Change-Id: Id99ca6de94d8d895dfaed1ed507e9d36c7f60670
Reviewed-on: https://go-review.googlesource.com/48869
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/http/example_test.go

index 1774795d379e3735da96471495cfc1ed037f1596..9de0893e8739b7d5c942fb983fdc8af41f81e454 100644 (file)
@@ -5,11 +5,14 @@
 package http_test
 
 import (
+       "context"
        "fmt"
        "io"
        "io/ioutil"
        "log"
        "net/http"
+       "os"
+       "os/signal"
 )
 
 func ExampleHijacker() {
@@ -109,3 +112,28 @@ func ExampleResponseWriter_trailers() {
                w.Header().Set("AtEnd3", "value 3") // These will appear as trailers.
        })
 }
+
+func ExampleServer_Shutdown() {
+       var srv http.Server
+
+       idleConnsClosed := make(chan struct{})
+       go func() {
+               sigint := make(chan os.Signal, 1)
+               signal.Notify(sigint, os.Interrupt)
+               <-sigint
+
+               // We received an interrupt signal, shut down.
+               if err := srv.Shutdown(context.Background()); err != nil {
+                       // Error from closing listeners, or context timeout:
+                       log.Printf("HTTP server Shutdown: %v", err)
+               }
+               close(idleConnsClosed)
+       }()
+
+       if err := srv.ListenAndServe(); err != http.ErrServerClosed {
+               // Error starting or closing listener:
+               log.Printf("HTTP server ListenAndServe: %v", err)
+       }
+
+       <-idleConnsClosed
+}