Skip to content

Instantly share code, notes, and snippets.

@anfernee
Created January 16, 2019 01:15
Show Gist options
  • Select an option

  • Save anfernee/6d7bcf361afdd33a41e6654025510960 to your computer and use it in GitHub Desktop.

Select an option

Save anfernee/6d7bcf361afdd33a41e6654025510960 to your computer and use it in GitHub Desktop.
verify Shutdown() and ListenAndServe behavior.
package main
import (
"context"
"log"
"net/http"
"time"
)
func delayedHandler(w http.ResponseWriter, r *http.Request) {
time.Sleep(5 * time.Second)
w.Write([]byte("i'm slow"))
}
func main() {
var server http.Server
server.Handler = http.HandlerFunc(delayedHandler)
server.Addr = ":8080"
waitCh := make(chan struct{})
go func() {
err := server.ListenAndServe()
log.Printf("server.ListenAndServe exited: %v", err)
close(waitCh)
}()
time.Sleep(time.Second)
go func() {
http.Get("http://localhost:8080")
}()
time.Sleep(100 * time.Millisecond)
err := server.Shutdown(context.Background())
log.Printf("server.Shutdown exited: %v", err)
<-waitCh
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment