private static IReadOnlyList <DnsResourceRecord> FilterExpiredRecords(DnsResourceRecordType type, IReadOnlyList <DnsResourceRecord> records, bool serveStale, bool filterSpecialCacheRecords) { if (records.Count == 1) { DnsResourceRecord record = records[0]; if (record.IsExpired(serveStale)) { return(Array.Empty <DnsResourceRecord>()); //record expired } if (filterSpecialCacheRecords) { if ((record.RDATA is DnsCache.DnsNXRecord) || (record.RDATA is DnsCache.DnsEmptyRecord) || (record.RDATA is DnsCache.DnsFailureRecord)) { return(Array.Empty <DnsResourceRecord>()); //special cache record } } return(records); } List <DnsResourceRecord> newRecords = new List <DnsResourceRecord>(records.Count); foreach (DnsResourceRecord record in records) { if (record.IsExpired(serveStale)) { continue; //record expired } if (filterSpecialCacheRecords) { if ((record.RDATA is DnsCache.DnsNXRecord) || (record.RDATA is DnsCache.DnsEmptyRecord) || (record.RDATA is DnsCache.DnsFailureRecord)) { continue; //special cache record } } newRecords.Add(record); } if (newRecords.Count > 1) { switch (type) { case DnsResourceRecordType.A: case DnsResourceRecordType.AAAA: newRecords.Shuffle(); //shuffle records to allow load balancing break; } } return(newRecords); }