C# - IMAP主机名上的TcpClient超时不存在

时间:2018-06-01 05:23:22

标签: c# imap tcpclient

所以我有一个非常基本的脚本:

#region Get Hostname IP
IPAddress[] dnsRecords = Dns.GetHostAddresses(hostname);
string ipHostname = dnsRecords[0].ToString();
if (ipHostname.Length == 0) {
    responseCode = imapLoginResponse.Failed;
    return false;
}
#endregion
#region Try make a request to the Host, Port
try {
    _Connection = new TcpClient(ipHostname, port);
} catch (SocketException ex) {
    System.Diagnostics.Debug.Write("-" + hostname + "-" + ipHostname + "- " + ex.Message);
    responseCode = ex.Message == "No such host is known" || ex.Message.StartsWith("No connection could be made because the target machine actively refused it") ? imapLoginResponse.BadHostname : imapLoginResponse.Failed;
    return false;
}

上面的代码只是尝试连接到IMAP服务器。

  • 获取imap。{domain.ext} DNS记录IP
  • 尝试使用端口993连接到该IP

死亡/肮脏/遗​​弃/停放网站的情况如下:

  • 获取imap。{domain.ext} DNS记录IP,即使它不存在也会以某种方式获得
  • 尝试使用端口993连接到该IP
  • 服务器没有响应导致超时

现在该怎么办?我无法将其转变为“BadHostname”,因为它可能只是用户端的连接问题,甚至没有连接到互联网。

如果我只是在这里重试,它将最终无限循环。 虽然是的,我可以做5次重试==无效的事情,但这不准确,可能仍然是临时的互联网问题。

我的问题是,为什么它会为不存在的记录获取DNS记录IP? 当这样的事情发生时,我打算做什么?

如果您需要测试,请尝试使用:imap.celerityinc.com(没有celebrityinc.com),您可以自己查看。

1 个答案:

答案 0 :(得分:0)

IP地址上提供的名称解析和服务是独立的。 您获得DNS记录,因为它确实存在于具有特定生命周期的DNS层次结构中的某个点。

当出现类似情况时你能做些什么?刷新本地DNS缓存。尝试不同的DNS服务器。使用您自己的DNS查询解决方案返回SOA。

相关问题