code: func (s *Server) serve(ctx context.Context, l net.Listener, wg *sync.WaitGroup, secret []byte) error {
  	if s.testingServeHook != nil {
  		s.testingServeHook()
  	}
  	srv := http.Server{
  		Handler: &protocolHandler{
  			ctx:    ctx,
  			wg:     wg,
  			secret: secret,
  			tokens: s.TokenGenerators,
  		},
  	}
  	return srv.Serve(l)
  }
docs: // serve runs the serving loop.