private IPEndPoint GetActiveDNSServer()
{
if (m_DnsServers == null)
{
m_DnsServers = DefaultDnsServers;
}
if (m_DnsServers.Count == 1)
{
return m_DnsServers[0];
}
else
{
if (m_activeDNSServer == null)
{
m_activeDNSServer = m_DnsServers[0];
}
else
{
// Check that the active DNS server is getting responses.
if (m_receiveTimeouts.ContainsKey(m_activeDNSServer) && m_receiveTimeouts[m_activeDNSServer] >= SWITCH_ACTIVE_TIMEOUT_COUNT)
{
// Switch active DNS server to alternative end point as too many consectutive receive failures on this one.
foreach (IPEndPoint dnsServer in m_DnsServers)
{
if (dnsServer != m_activeDNSServer)
{
logger.Debug("Switching active DNS server from " + m_activeDNSServer + " to " + dnsServer + ".");
m_activeDNSServer = dnsServer;
ResetTimeoutCount(m_activeDNSServer);
}
}
}
}
return m_activeDNSServer;
}
}