【发布时间】:2014-10-15 14:21:41
【问题描述】:
我正在编写一个 C++ 应用程序,它需要处理来自 C API,特别是 WinSock2 API 的错误代码。我不确定处理致命错误与非致命错误的最佳方法。
例如,如果我对send() 的调用失败并出现错误代码WSAECONNABORTED,我想将错误返回给调用者,但继续执行程序。在这种情况下,调用者会将连接标记为已终止并继续。但如果它失败并出现我认为是致命的错误,例如WSAENETDOWN,我希望应用程序终止。
我知道异常用于“异常”情况,因此使用异常来处理致命错误情况是有意义的。我要问的是如何处理非致命错误情况。
在非致命情况下我应该返回错误代码吗?如果我还需要返回一个值,我将需要返回一个代码(可能成功)和一个值。或者我应该进行两个异常分类,比如FatalError 和NonFatalError 类,并且只在处理NonFatalError 异常时尝试恢复?还是有其他/更好的方法来做到这一点?
[更新]说明
我对原始问题的理解似乎有些混乱。我了解如何处理异常、不处理异常时会发生什么、重新抛出异常以及它们的性能特征。
我正在寻求技术/最佳实践来处理并非真正“异常”的情况。在这种情况下,可能发生的错误会导致连接变得不可用,但不会影响服务器的其余部分。
我最好避免每个错误代码都有一个异常类,因为这会产生很多几乎无用的异常类。
【问题讨论】:
-
如果您不想处理它,请在您的 catch 子句中使用
throw;。没有任何支持,通过 terminate() 结束程序。 Bam,死了,对用户没有任何提示。 -
“异常与返回码”与“是否致命”完全正交。