.Net套接字类错误代码

时间:2014-11-21 21:33:01

标签: c++ .net sockets winapi

我一直在研究用于创建socket的C ++(或Windows API)方法,以及用于创建socket的.Net方法。我担心的是.Net Socket类中是否也提供了Windows套接字中可用的相同错误代码。我查看了this page" Windows套接字错误代码"还有this page,它描述了.Net Socket类的错误代码。

在查看上述两个页面后,似乎.Net Socket类提供的socket错误报告与Windows API一样多。我更倾向于使用.Net来实现Socket,因为我觉得作为一个在C ++和网络编程方面没有广泛知识的人会更容易。但是,此作业要求我能够报告与Windows API相同粒度的错误。

我试图在这里尽可能具体,但是根据所提供的信息,您可以告诉我有关比较两者的错误代码吗?据我所知,我认为C#Socket类在这方面与Windows API一样强大。

1 个答案:

答案 0 :(得分:1)

如果您在.NET中收到SocketException,则该异常会有一个名为ErrorCode的属性,该属性会映射到您在第一个链接中发布的所有值。

因此,两个API在错误报告中都是精细的。你链接的枚举只是为了说服你,所以你不需要为更流行的错误代码制作自己的常量。

const int WSA_E_NO_MORE= 10110;
const int WSAEACCES = 10013;

void Foo()
{
    try
    {
       //...
    }
    catch(SocketException ex)
    {
       // These two lines are equivalent.
       //if(ex.ErrorCode == WSAEACCES)
       if(ex.ErrorCode == SocketError.AccessDenied)
       {
            //Do something special for access denied.
       }
       else if(ex.ErrorCode == WSA_E_NO_MORE)
       {
           //Do something special with the WSA_E_NO_MORE error code
       }
    }
}

如果您想要一种简单的方法来查看哪个枚举映射到哪个错误代码the reference source显示每个枚举代表的原始常量。