C++ 中的 Winsock2 + OpenSSL:如何捕获它们的异常?

Winsock2 + OpenSSL in C++: How can I catch their exceptions?

我想捕获在使用带有 OpenSSL 加密的 Winsock2 套接字时抛出的异常,但我不知道该怎么做。在 C# 中,我只能捕获基本的 class 异常,但在 C++ 中,试图用 "catch(std::exception e)" 捕获它们是行不通的。它只适用于 "catch(...)",但我需要一些对象来获取详细信息。

在 C++ 中是否不可能通过为基 class std::exception 创建一个 catch 块来捕获每一种异常,或者我是否从其他基 class?

干杯 亚历克斯

在 OpenSSL 中发生错误时,更详细的信息存储在 "error queue" 中。您可以对错误队列做的最简单的事情是打印整个队列。这可以通过 ERR_print_errors_fp() 打印错误队列来完成。你在周围使用 C++ 包装器吗?请注意,在大多数情况下,C++ 异常是特定于框架的。有许多框架异常不是从 std::exception 派生的例子。例如,在 MFC 中,所有异常都派生自 CException,与 std::exception.

无关

您甚至可以在 C++ 中将整数作为 "exception object" 抛出。所以......没有共同的例外基础class。 您将不得不查看您正在使用的库文档,并搜索可能的异常情况。 如果您正在使用 Visual Studio,您可以告诉调试器在异常被抛出时停止(主菜单->调试->异常...或者只是查看您的 "Output window" 并搜索抛出的异常类型)。

据我所知,winsock 和 OpenSSL 是基于 C 的项目,因此不会抛出 C++ 异常。

也就是说,这些项目有可能 引发 结构化异常。例如,如果将错误的缓冲区传递给这些项目之一导出的函数,则操作系统可能会引发访问冲突异常。

虽然可以 catch such exceptions,但您可能不希望 - 引发异常的应用程序的状态可能不一致。