code: func StartAcceptLoop(l net.Listener, rOpts retry.Options) (<-chan net.Conn, <-chan error) {
  	var (
  		connCh  = make(chan net.Conn)
  		errCh   = make(chan error)
  		retrier = retry.NewRetrier(rOpts)
  	)
  
  	go func() {
  		defer l.Close()
  
  		for {
  			var conn net.Conn
  			if err := retrier.Attempt(func() error {
  				var connErr error
  				conn, connErr = l.Accept()
  				if connErr == nil {
  					return nil
  				}
  				// If the error is a temporary network error, we consider it retryable.
  				if ne, ok := connErr.(net.Error); ok && ne.Temporary() {
  					return ne
  				}
  				// Otherwise it's a non-retryable error.
  				return errors.NewNonRetryableError(connErr)
  			}); err != nil {
  				close(connCh)
  				errCh <- err
  				close(errCh)
  				return
  			}
  			connCh <- conn
  		}
  	}()
  
  	return connCh, errCh
  }
docs: // StartAcceptLoop starts an accept loop for the given listener,
  // returning accepted connections via a channel while handling
  // temporary network errors. Fatal errors are returned via the
  // error channel with the listener closed on return.