/// <summary>
/// Get IPv4 address from notation (xxx.xxx.xxx.xxx) or hostname
/// </summary>
public static NetAddress Resolve(string ipOrHost)
{
if (string.IsNullOrEmpty(ipOrHost))
{
throw new ArgumentException("Supplied string must not be empty", "ipOrHost");
}
ipOrHost = ipOrHost.Trim();
NetAddress ipAddress = null;
if (NetAddress.TryParse(ipOrHost, out ipAddress))
{
if (ipAddress.AddressFamily == AddressFamily.InterNetwork)
{
return(ipAddress);
}
throw new ArgumentException("This method will not currently resolve other than ipv4 addresses");
}
// ok must be a host name
try
{
//var addresses = Dns.GetHostAddresses(ipOrHost);
var addressesTask = Dns.GetHostAddressesAsync(ipOrHost);
addressesTask.RunSynchronously();
//var address = addressesTask.Result;
if (addressesTask.Result == null)
{
return(null);
}
foreach (var address in addressesTask.Result)
{
if (address.AddressFamily == AddressFamily.InterNetwork)
{
return(address);
}
}
return(null);
}
catch (SocketException ex)
{
if (ex.SocketErrorCode == SocketError.HostNotFound)
{
//LogWrite(string.Format(CultureInfo.InvariantCulture, "Failed to resolve host '{0}'.", ipOrHost));
return(null);
}
else
{
throw;
}
}
}