code: func (m *Mux) Serve() error {
  	defer m.waitCancel()
  	backoffTimer := time.NewTicker(5 * time.Second)
  	defer backoffTimer.Stop()
  	for {
  		conn, err := m.Listener.Accept()
  		if err == nil {
  			if tcpConn, ok := conn.(*net.TCPConn); ok {
  				tcpConn.SetKeepAlive(true)
  				tcpConn.SetKeepAlivePeriod(3 * time.Minute)
  			}
  			go m.detectAndForward(conn)
  			continue
  		}
  		if m.isClosed() {
  			return nil
  		}
  		select {
  		case <-backoffTimer.C:
  			m.Debugf("backoff on accept error: %v", trace.DebugReport(err))
  		case <-m.context.Done():
  			return nil
  		}
  	}
  }
docs: // Serve is a blocking function that serves on the listening socket
  // and accepts requests. Every request is served in a separate goroutine