Exception 如何在注销例程期间处理套接字错误

Exception 如何在注销例程期间处理套接字错误,exception,logout,msn,Exception,Logout,Msn,我正在写一个即时消息库。当前,当读取或写入套接字时引发SocketException时,我从应用程序内部启动注销例程,将SocketException作为LogoutEventArgs的参数传递给最终用户。这为最终用户提供了一种方式来查看到底是什么潜在异常导致了未请求的注销 我的问题是,如果在用户调用注销函数期间,套接字实际抛出异常,我该怎么办 示例-最终用户调用注销函数,当注销函数等待现有请求正常结束时,套接字在读取线程中抛出异常 在我看来,我有两个选择- 假装错误没有发生,就像我们注销时断开

我正在写一个即时消息库。当前,当读取或写入套接字时引发SocketException时,我从应用程序内部启动注销例程,将SocketException作为LogoutEventArgs的参数传递给最终用户。这为最终用户提供了一种方式来查看到底是什么潜在异常导致了未请求的注销

我的问题是,如果在用户调用注销函数期间,套接字实际抛出异常,我该怎么办

示例-最终用户调用注销函数,当注销函数等待现有请求正常结束时,套接字在读取线程中抛出异常

在我看来,我有两个选择-

  • 假装错误没有发生,就像我们注销时断开了套接字一样

  • 当引发套接字异常时,查看是否发生注销请求,如果发生,则覆盖它。导致原始注销请求引发AlreadyLoggedOutException,以及单独的注销事件,该事件在LogoutEventArgs中传递异常

  • 另外,稍微相关-如果服务器启动未请求的关机(即读取调用返回null),我该怎么办。。如果您发送不喜欢的请求,.NET Messenger服务器有这样做的倾向。我是否认为这本身就是一个例外

    我发现我的图书馆的整个断开连接/注销部分是我的一大难题。我就是不知道该怎么办。有谁知道有哪种开源代码应用程序能很好地处理这种情况


    很久以来,我一直在试图解决这个问题,这让我发疯。

    我决定不将SocketException传递给最终用户,因为断开连接并不是真正的例外,应该预料到并处理。相反,LogoutEventArgs上有一个LogoutReason属性,用于指定发生注销的原因

    我决定,如果断开连接发生在注销期间,那么这实际上不是一个例外,因为注销无论如何都会断开连接。在这种情况下,我完全不考虑例外情况