/// <summary>
        /// Gets an IP address by name, via DNS.
        /// </summary>
        /// <param name="hostname">The hostname.</param>
        /// <returns>The corresponding IP address.</returns>
        /// <remarks>
        /// <para>Returns the first IP v4 address available, if any,
        /// else the first IP v6 address available. Throws if it cannot
        /// get an IP for the hostname via DNS.</para>
        /// </remarks>
        // ReSharper disable once InconsistentNaming
        public static IPAddress GetIPAddressByName(string hostname)
        {
            if (hostname == "0.0.0.0")
            {
                return(IPAddress.Any);
            }

            var addresses = HDns.GetHostAddresses(hostname);

            // prefer an IP v4, if possible
            return(addresses.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork) ??
                   addresses.FirstOrDefault());
        }