【问题标题】:.Net Socket class error codes.Net Socket 类错误代码
【发布时间】:2014-11-21 21:33:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ .net sockets winapi


    【解决方案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 显示每个枚举代表的本机常量。

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2022-10-24
      • 2012-04-14
      • 2015-03-16
      • 2011-11-30
      • 2015-07-13
      相关资源
      最近更新 更多