gpt4 book ai didi

c# - Dns.GetHostEntry 能否返回一个地址列表为空的 IPHostEntry?

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:39 26 4
gpt4 key购买 nike

我只是想知道是否会出现主机名可以成功解析但返回的 hostEntry.AddressList 为空的情况。

目前我正在做这样的事情:

IPHostEntry hostEntry = Dns.GetHostEntry("some.hostname.tld");
if (hostEntry.AddressList.Count() < 1)
{
// can that ever happen?
throw new ArgumentException("hostName has no assigned IP-Address");
}
TcpClient client = new TcpClient(hostEntry.AddressList[0], 1234);

我的假设是 Dns.GetHostEntry 要么在找不到主机名时抛出异常,要么 AddressList 为非空,但我不确定。

最佳答案

不,您不会看到一个空的地址列表:即使您查询一个确实存在但没有 A 或 AAAA (IPv6) 记录的 DNS 标签,SocketException(“没有这样的主机是已知的”)也会抛出。

您可以通过查看 .NET 引用源版本中 DNS.cs 中的函数 InternalGetHostByName(string hostName, bool includeIPv6) 来验证这一点。除了一些特定于平台的预防措施外,DNS 查找是 Winsock 的简单包装器 gethostbyname功能。

Gethostbyname 要么失败,要么返回一个地址列表。永远不会返回一个空的地址列表,因为在这种情况下该函数将失败并返回 WSANO_DATA(“有效名称,没有请求类型的数据记录”),这转化为我们已经在 .NET 中看到的套接字异常。

编辑 2012 年 5 月,响应提示无论如何都会返回一个空列表:请注意,此答案仅适用于 Win32,并且 WinCE 等平台的行为可能完全不同。如果您在 Win32 上看到“空列表”行为,并且您发出的请求是针对公开可用的 DNS 服务器,请发布您的代码...

关于c# - Dns.GetHostEntry 能否返回一个地址列表为空的 IPHostEntry?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/156585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com