code: public void retrieve(DataSource source) {
          try {
              localControlChannel.resetReplyCount();
              TransferContext context= createTransferContext();
  
              if (session.serverMode == Session.SERVER_PASSIVE) {
                  runTask(createPassiveConnectTask(source, context));
              } else {
                  runTask(createActiveConnectTask(source, context));
              }
          } catch (Exception e) {
              exceptionToControlChannel(e, "ocurred during retrieve()");
          }
      }
docs: Asynchronous; return before completion.
  Start the outgoing transfer
  reading the data from the supplied data source.
  Any exception that would occure will not be thrown but
  returned through the local control channel.