code: func (a *AgentServer) Serve() error {
  	if a.listener == nil {
  		return trace.BadParameter("Serve needs a Listen call first")
  	}
  	var tempDelay time.Duration // how long to sleep on accept failure
  	for {
  		conn, err := a.listener.Accept()
  		if err != nil {
  			neterr, ok := err.(net.Error)
  			if !ok {
  				return trace.Wrap(err, "unknown error")
  			}
  			if !neterr.Temporary() {
  				if !strings.Contains(neterr.Error(), "use of closed network connection") {
  					log.Errorf("got permanent error: %v", err)
  				}
  				return err
  			}
  			if tempDelay == 0 {
  				tempDelay = 5 * time.Millisecond
  			} else {
  				tempDelay *= 2
  			}
  			if max := 1 * time.Second; tempDelay > max {
  				tempDelay = max
  			}
  			log.Errorf("got temp error: %v, will sleep %v", err, tempDelay)
  			time.Sleep(tempDelay)
  			continue
  		}
  		tempDelay = 0
  		go func() {
  			if err := agent.ServeAgent(a.Agent, conn); err != nil {
  				if err != io.EOF {
  					log.Errorf(err.Error())
  				}
  			}
  		}()
  	}
  }
docs: // Serve starts serving on the listener, assumes that Listen was called before