protected override async Task <DnsResponse> QueryDnsImplAsync(DnsQueryParamBase param, CancellationToken cancel)
        {
            switch (param)
            {
            case DnsGetIpQueryParam getIpQuery:
                if (IPAddress.TryParse(getIpQuery.Hostname, out IPAddress ip))
                {
                    return(new DnsResponse(param, ip._SingleArray()));
                }
                else
                {
                    return(new DnsResponse(param, await PalDns.GetHostAddressesAsync(getIpQuery.Hostname, getIpQuery.Timeout, cancel)));
                }
            }

            throw new NotImplementedException();
        }
        public DnsResponse(DnsQueryParamBase query, IPAddress[] addressList)
        {
            this.Query = query;

            IEnumerable <IPAddress> filtered = addressList;

            if (this.Query.Options.Bit(DnsQueryOptions.IPv4Only))
            {
                filtered = filtered.Where(x => x.AddressFamily == AddressFamily.InterNetwork);
            }

            if (this.Query.Options.Bit(DnsQueryOptions.IPv6Only))
            {
                filtered = filtered.Where(x => x.AddressFamily == AddressFamily.InterNetworkV6);
            }

            this.IPAddressList = new List <IPAddress>(filtered);
        }
 protected abstract Task <DnsResponse> QueryDnsImplAsync(DnsQueryParamBase param, CancellationToken cancel);