code: func (s *Server) Stop() (err error) {
  	s.Server.SetKeepAlivesEnabled(false)
  
  	if runtime.GOOS != "windows" {
  		// force connections to close after timeout
  		done := make(chan struct{})
  		go func() {
  			s.connWg.Done() // decrement our initial increment used as a barrier
  			s.connWg.Wait()
  			close(done)
  		}()
  
  		// Wait for remaining connections to finish or
  		// force them all to close after timeout
  		select {
  		case <-time.After(s.connTimeout):
  		case <-done:
  		}
  	}
  
  	// Close the listener now; this stops the server without delay
  	s.listenerMu.Lock()
  	if s.listener != nil {
  		err = s.listener.Close()
  		s.listener = nil
  	}
  	s.listenerMu.Unlock()
  
  	// Closing this signals any TLS governor goroutines to exit
  	if s.tlsGovChan != nil {
  		close(s.tlsGovChan)
  	}
  
  	return
  }
docs: // Stop stops s gracefully (or forcefully after timeout) and
  // closes its listener.