我正在写一个即时消息库。当前,当在读取或写入套接字时抬高socketException时,我从应用程序内部启动注销例程,将socketException传递给enduser作为logouteventargs的参数。这为最终用户提供了一种查看基本异常实际上导致未征收注销的方式。

我的问题是,如果在用户调用注销功能时,该怎么办,插座实际上会引发异常。

示例 - 最终用户调用注销函数,当注销功能正在等待现有请求优雅地结束时,插座会在读取线程中引发异常。

我看到了两个选择 -

  1. 假装没有发生错误,并且只是在注销的一部分中表现得像插座断开。

  2. 当提出插座异常时,查看是否正在注销请求,如果是这样,请覆盖它。导致原始注销请求抛出已经插入的exception,以及单独的注销事件,该事件通过logouteventargs中的异常。

另外,略有相关 - 如果服务器启动未请求的关机,我该怎么办(即。不喜欢。我本身是否将其视为例外?

我发现整个脱节/登录图书馆的一部分是我身边的主要荆棘。我似乎无法缠绕着它。有谁知道有任何开源代码应用程序可以很好地处理这种情况?

我一直在试图解决这个问题这么长时间,这让我发疯了。

有帮助吗?

解决方案

我决定不将socketException传递给最终用户,因为断开连接并不是真正的例外,应该预期和处理。取而代之的是,Logouteventargs上有一个logoutreason属性,它指定了注销的原因。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top