防止Dns.GetHostAddresses引发异常?

时间:2018-07-15 15:32:58

标签: c#

因此,用一个主机名为已死网站调用Dns.GetHostAddresses通常会引发异常,指出“未知此类主机”。

用例中的异常会导致大量额外的CPU使用,而这些额外的CPU使用可能是致命的。

是否有一种方法可以覆盖该方法以仅返回null或其他内容?

该异常是一个SocketException,指示它使用了套接字,我在Reference Source中查看,但在DNS.GetHostAddresses(string)中未找到任何套接字引用。我确实看到正在创建一个SocketException对象,但是没有使用它。

3 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您的问题,但是您是否正在尝试实现类似的目标?

private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            IPHostEntry hostEntry;

            hostEntry = Dns.GetHostEntry(textBox3.Text);

            if (hostEntry.AddressList.Length > 0)
            {
                var ip = hostEntry.AddressList[0];
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                s.Connect(ip, 80);
                textBox5.Text = ip.ToString();
            }

        }
        catch
        {
             textBox5.Text = "No Conversion available";
        }

答案 1 :(得分:0)

使用P / Invoke访问Win32 DNS API。从这里开始:https://www.pinvoke.net/default.aspx/dnsapi.DnsQuery

答案 2 :(得分:0)

尝试使用Dns.BeginGetHostAddresses() undefined回调。
如果Host项不可解析(这是大多数IAsyncResult方法的工作方式,无论是否喜欢),但在UI线程中均未引发,则无法避免该异常。

我不确定是否可以解决此问题,但我没有注意到运行它时是否有CPU峰值(只是第一次使用,但是该方法是通过System.Net click事件调用的) )。

Button