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

时间:2015-03-26 12:33:42

标签: c++ windows sockets exception openssl

我想捕获从Winsock2使用OpenSSL加密的套接字时引发的异常,但我无法弄清楚如何做到这一点。在C#中我可以捕获基类Exception,但是在C ++中尝试使用" catch(std :: exception e)"来捕获它们。只是不起作用。它只适用于" catch(...)",但我需要一些对象来获取细节。

C ++中是否无法通过为基类std :: exception创建catch块来捕获每种异常,或者我是否从其他基类派生异常?

干杯 亚历

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

在OpenSSL发生错误时,更详细的信息存储在"错误队列"中。您可以使用错误队列执行的最简单操作是打印整个队列。这可以使用ERR_print_errors_fp()来打印错误队列。你在使用C ++包装吗?请注意,在大多数情况下,C ++异常是特定于框架的。有许多示例表明框架异常不是从std::exception派生的。例如,在MFC中,所有异常都来自CException,与std::exception无关。

答案 2 :(得分:1)

你甚至可以在c ++中将整数作为“异常对象”抛出。所以...异常没有共同的基类。 您将不得不查看您正在使用的库文档,并搜索可能的异常。 如果您使用的是Visual Studio,则可以告诉调试器在抛出异常时停止(主菜单 - > Debug-> Exceptions ...或者只是查看“输出窗口”并搜索抛出的异常类型)。