/// <inheritdoc /> public async Task <IPasvListener> CreateTcpListenerAsync( IFtpConnection connection, AddressFamily?addressFamily, int port, CancellationToken cancellationToken) { IPasvListener listener; if (port < 0) { throw new ArgumentOutOfRangeException(nameof(port), "may not be less than 0"); } var pasvOptions = await _addressResolver.GetOptionsAsync(connection, addressFamily, cancellationToken) .ConfigureAwait(false); if (port > 0 && pasvOptions.HasPortRange && (port > pasvOptions.PasvMaxPort || port < pasvOptions.PasvMinPort)) { throw new ArgumentOutOfRangeException( nameof(port), $"must be in {pasvOptions.PasvMinPort}:{pasvOptions.PasvMaxPort}"); } if (port == 0 && pasvOptions.HasPortRange) { listener = CreateListenerInRange(connection, pasvOptions); } else { listener = new PasvListener(connection.LocalEndPoint.Address, port, pasvOptions.PublicAddress); } return(listener); }
/// <inheritdoc /> public Task <IPasvListener> CreateTcpListener(IFtpConnection connection, int port) { IPasvListener listener; if (port < 0) { throw new ArgumentOutOfRangeException(nameof(port), "may not be less than 0"); } if (port > 0 && _pasvMinPort > 0 && (port > _pasvMaxPort || port < _pasvMinPort)) { throw new ArgumentOutOfRangeException(nameof(port), $"must be in {_pasvMinPort}:{_pasvMaxPort}"); } if (port == 0 && _pasvPorts != null) { listener = CreateListenerInRange(connection); } else { listener = new PasvListener(connection.LocalEndPoint.Address, port, PasvExternalAddress); } return(Task.FromResult(listener)); }