code: func (s *Server) Serve(ln net.Listener) error {
  	if tcpLn, ok := ln.(*net.TCPListener); ok {
  		ln = tcpKeepAliveListener{TCPListener: tcpLn}
  	}
  
  	ln = newGracefulListener(ln, &s.connWg)
  
  	s.listenerMu.Lock()
  	s.listener = ln
  	s.listenerMu.Unlock()
  
  	if s.Server.TLSConfig != nil {
  		// Create TLS listener - note that we do not replace s.listener
  		// with this TLS listener; tls.listener is unexported and does
  		// not implement the File() method we need for graceful restarts
  		// on POSIX systems.
  		// TODO: Is this ^ still relevant anymore? Maybe we can now that it's a net.Listener...
  		ln = tls.NewListener(ln, s.Server.TLSConfig)
  
  		// Rotate TLS session ticket keys
  		s.tlsGovChan = caddytls.RotateSessionTicketKeys(s.Server.TLSConfig)
  	}
  
  	err := s.Server.Serve(ln)
  	if QUIC {
  		s.quicServer.Close()
  	}
  	return err
  }
docs: // Serve serves requests on ln. It blocks until ln is closed.