我正在编写一个C ++应用程序,它需要处理来自C API的错误代码,特别是WinSock2 API。我不确定处理致命错误与非致命错误的最佳方法。
例如,如果我对send()
的调用失败并显示错误代码WSAECONNABORTED
,我想将错误返回给调用者,但继续执行程序。在这种情况下,呼叫者将连接标记为已终止并继续。但如果它失败了,我想考虑致命错误,例如WSAENETDOWN
,我希望应用程序终止。
我知道异常用于“异常”情况,因此使用异常来处理致命错误情况是有意义的。我在质疑的是如何处理非致命错误案例。
我应该在非致命案件中返回错误代码吗?如果我还需要返回一个值,我需要返回一个代码(可能成功)和一个值。或者我应该进行两个异常分类,例如FatalError
和NonFatalError
类,并且只在处理NonFatalError
异常时尝试恢复?或者还有其他/更好的方法吗?
[更新]澄清
关于我对原始问题的看法似乎有些混乱。我理解如何处理异常,当它们不处理时会发生什么,重新抛出异常以及它们的性能特征。
我要求技术/最佳实践来处理那些并非真正“特殊”的情况。在这种情况下,可能发生的错误导致连接变得不可用,但不会影响服务器的其余部分。
最好我避免每个错误代码都有一个异常类,因为这会产生很多无用的异常类。
答案 0 :(得分:0)
如果要在callstack中传播错误,可以使用异常。创建继承自std :: exception的自定义类,如果要应用特定处理,请捕获它们。
try {
my_function_which_throws();
} catch (const FatalError& e) {
// do something, or rethrow
} catch (const NonFatalError& e) {
// log or do nothing
}
异常只需要时间来处理它们是否被抛出。如果你的函数没有抛出任何东西,它不会影响性能。