// listen starts one or more listeners for the handler. The list // of addresses are func listen(addrs string, wait time.Duration, h http.Handler) { for _, addr := range commas.Split(addrs, -1) { if addr == "" { continue } p := semicolons.Split(addr, 4) switch len(p) { case 1: go listenAndServe(p[0], h) case 2: go listenAndServeTLS(p[0], p[1], p[1], h) case 3: go listenAndServeTLS(p[0], p[1], p[2], h) default: log.Fatal("[FATAL] Invalid address format ", addr) } } // wait for shutdown signal <-quit // disable routing for all requests route.Shutdown() // trigger graceful shutdown log.Printf("[INFO] Graceful shutdown over %s", wait) time.Sleep(wait) log.Print("[INFO] Down") }
// startListeners runs one or more listeners for the handler func startListeners(listen []config.Listen, wait time.Duration, h http.Handler) { for _, l := range listen { go listenAndServe(l, h) } // wait for shutdown signal <-quit // disable routing for all requests route.Shutdown() // trigger graceful shutdown log.Printf("[INFO] Graceful shutdown over %s", wait) time.Sleep(wait) log.Print("[INFO] Down") }