GetHostAddresses不同的错误代码

时间:2012-08-02 15:46:53

标签: c# .net windows winapi network-programming

我编写了一个小型测试程序,使用Dns.GetHostAddresses来解析主机名。如果我输入的主机名不存在,则会抛出SocketException,消息为No such host is known
我喜欢这个,因为错误消息足够小,可以放入我的UI,直截了当。

现在我将代码复制并粘贴到一个更大的项目中,但是这次当我输入我在测试项目中完全相同的主机名时,它会抛出一个SocketException,但消息设置为{{ 1}}

每个程序中的堆栈跟踪都是相同的,但第一个错误是The requested name is valid, but no data of the requested type was found,其中第二个错误是WSAHOST_NOT_FOUND

我可以输出自己的错误信息,但我想知道为什么每次都会抛出不同的错误?代码没有区别。

此外,似乎无论我运行每个程序多少次,它们都会继续输出相同的错误消息。它不是交替的或任何东西。

============================================ ===============================

好吧,我弄明白是什么导致了这个问题 我添加了Pcap.Net作为参考,并将其包含在WSANO_DATA的项目中 无论如何,在我评论出来之后,using PcapDotNet.Core;正在抛出正确的例外。

如果有人能告诉我为什么它的表现如此,以及如何绕过它,那就太好了。

1 个答案:

答案 0 :(得分:2)

SocketException中出现GetHostAddresses的原因有很多。在WSA_NODATA的情况下,这意味着DNS中有一个条目;但没有IP地址(即没有A记录)。如果无法访问DNS服务器但数据已缓存,则可能会出现其他错误。或者,如果DNS服务器无法访问且数据未缓存,则可能会出现其他错误。等等。不幸的是GetHostAddresses将所有这些错误包装在一个异常类型中。如果您想针对每种类型的错误执行不同的操作,则必须在SocketException中检查相关属性。如果您只想检测“它不起作用”,那么您不必检查。但是,很明显SocketException消息因故障而异,因此我不建议仅使用Message。更不用说,这将在其他语言版本的Windows上翻译 - 因此,如果您的应用程序的其余部分是英语,则可能看起来很奇怪,除了此消息。

从技术上讲,它可能会出现以下错误之一:WSANOTINITIALIZEDWSAENETDOWNWSAHOST_NOT_FOUNDWSATRY_AGAINWSANO_RECOVERYWSANO_DATA,{ {1}},WSAEINPROGRESSWSAEFAULT。虽然有些是极不可能的。

我还认为,根据IPv6或IPv4是否正在发挥作用,您将获得不同的消息。

相关问题