繁体   English   中英

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

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

我想捕捉在Winsock2中使用带有OpenSSL加密的套接字时引发的异常,但是我不知道该怎么做。 在C#中,我只能捕获基类Exception,但是在C ++中,尝试使用“ catch(std :: exception e)”来捕获它们是行不通的。 它仅与“ catch(...)”一起使用,但是我需要一些对象来获取详细信息。

在C ++中,是否不可能通过为基类std :: exception创建catch块来捕获每种异常,还是我从其他基类派生了异常?

干杯亚历克斯

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

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

尽管有可能捕获此类异常 ,但是您可能不想这样做-引发异常的应用程序状态可能不一致。

在OpenSSL中,发生错误时,更详细的信息存储在“错误队列”中。 您可以使用错误队列执行的最简单的操作是打印整个队列。 可以使用ERR_print_errors_fp()完成此操作以打印错误队列。 您是否正在使用C ++包装器? 请注意,在大多数情况下,C ++异常是特定于框架的。 有很多示例没有从std::exception派生框架std::exception 例如,在MFC中,所有异常都源自CException ,它与std::exception无关。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM