public async Task <IReadOnlyList <NameServerAddress> > GetPrimaryNameServerAddressesAsync(DnsServer dnsServer) { DnsResourceRecord soaRecord = _entries[DnsResourceRecordType.SOA][0]; IReadOnlyList <NameServerAddress> primaryNameServers = soaRecord.GetPrimaryNameServers(); if (primaryNameServers.Count > 0) { List <NameServerAddress> resolvedNameServers = new List <NameServerAddress>(primaryNameServers.Count * 2); foreach (NameServerAddress nameServer in primaryNameServers) { if (nameServer.IsIPEndPointStale) { await ResolveNameServerAddressesAsync(dnsServer, nameServer.Host, nameServer.Port, nameServer.Protocol, resolvedNameServers); } else { resolvedNameServers.Add(nameServer); } } return(resolvedNameServers); } string primaryNameServer = (soaRecord.RDATA as DnsSOARecordData).PrimaryNameServer; IReadOnlyList <DnsResourceRecord> nsRecords = GetRecords(DnsResourceRecordType.NS); //stub zone has no authority so cant use QueryRecords List <NameServerAddress> nameServers = new List <NameServerAddress>(nsRecords.Count * 2); foreach (DnsResourceRecord nsRecord in nsRecords) { if (nsRecord.IsDisabled()) { continue; } if (primaryNameServer.Equals((nsRecord.RDATA as DnsNSRecordData).NameServer, StringComparison.OrdinalIgnoreCase)) { //found primary NS await ResolveNameServerAddressesAsync(dnsServer, nsRecord, nameServers); break; } } if (nameServers.Count < 1) { await ResolveNameServerAddressesAsync(dnsServer, primaryNameServer, 53, DnsTransportProtocol.Udp, nameServers); } return(nameServers); }