对于 IdTCPServer,引发什么异常以进行清理是否重要?

For IdTCPServer, does it matter what exception is raised for it to clean up?

我从很多 questions here 中了解到,Indy TCP Server 依赖异常来在使用后清理连接。

我手头有一台服务器,其编码方式是异常由代码处理,不会为 Indy 重新引发。

理想的世界里,我会重写它来满足这个要求。可悲的是,我在一个 真实的 世界中,没有时间也没有人力资源在需要修复的时候进行此类修复。

服务器和连接有一个有趣的 属性,但是:处理完全发生在 一个 OnExecute 运行 中。这意味着我知道一个事实,即在 OnExecute 过程结束时,连接一定已经关闭,并且预计客户端尚未连接。

所以,我正在考虑做一个简单的卑鄙把戏:在 OnExecute 代码的末尾,我可以 raise 一个通用的 Indy 异常,而不是简单地返回,例如 EIdException,以便 Indy 捕获它并执行其清理过程。

所以,我的问题是,对于 Indy 清理连接,从 OnExecute 引发什么异常是否重要? 我可以提出 EIdException 吗?或者对于这种情况,最好提出 Indy 的任何其他异常?

请注意,我要问的是我是否可以吞下所有异常并在最后引发一个新异常,而不是建议的重新引发异常的路径。

TIdTCPServer 要求 引发异常。 IF 引发异常,服务器将捕获异常并触发其 OnException 事件。但是无论是否引发异常,都会执行清理。如果您确保连接在 OnExecute 事件存在之前正确关闭,那就这样吧。只要您看到服务器触发其 OnDisconnect 事件,那么一切都很好。