* Added "GetHostFromDNS" to Util to replace the various DNS resolution methods we use. Favours IPv4 addresses before IPv6 addresses to work around the Vista preference issue.

This commit is contained in:
Adam Frisby
2007-07-18 21:55:24 +00:00
parent 4c8b8d22ff
commit 11efebd29e
3 changed files with 27 additions and 2 deletions

View File

@@ -212,7 +212,7 @@ namespace OpenSim.Framework.Types
string internalAddress = GetString(configData, "InternalIPAddress", "0.0.0.0", "Internal IP Address for UDP client connections").ToString();
int internalPort = GetIPPort(configData, "InternalIPPort", "9000", "Internal IP Port for UDP client connections");
IPAddress internalIPAddress = Dns.GetHostByName(internalAddress).AddressList[0];
IPAddress internalIPAddress = Util.GetHostFromDNS(internalAddress);
m_internalEndPoint = new IPEndPoint(internalIPAddress, internalPort);
m_externalHostName = GetString(configData, "ExternalHostName", "127.0.0.1", "External Host Name");

View File

@@ -27,6 +27,7 @@
*/
using System;
using System.Security.Cryptography;
using System.Net;
using System.Text;
using libsecondlife;
@@ -176,6 +177,30 @@ namespace OpenSim.Framework.Utilities
return output.ToString();
}
/// <summary>
/// Returns a IP address from a specified DNS, favouring IPv4 addresses.
/// </summary>
/// <param name="dnsAddress">DNS Hostname</param>
/// <returns>An IP address, or null</returns>
public static IPAddress GetHostFromDNS(string dnsAddress)
{
IPAddress[] hosts = Dns.GetHostEntry(dnsAddress).AddressList;
foreach (IPAddress host in hosts)
{
if (host.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
return host;
}
}
if (hosts.Length > 0)
return hosts[0];
return null;
}
public Util()
{