我正在尝试处理SSL错误场景,例如SSL async_handshake()花费的时间太长。一段时间后(比如说20秒),我想关闭这个连接(lowest_layer().close())。我将连接对象作为参数传递给shared_ptr (),因此对象仍然存在,最终调用握手处理程序并销毁对象。
但是,我还是会有零星的车祸!看起来,在close()之后,SSL仍然试图读取或操作read缓冲区。
因此,最基本的问题是:硬关闭() SSL连接安全吗?
有什么想法吗?
发布于 2011-04-15 15:33:43
通常,我在套接字上使用的停止未执行异步操作的方法是socket::cancel,如文档中所述。它们的处理程序将以asio::error::operation_aborted作为错误参数进行调用,您将需要以某种方式处理该参数。
尽管如此,我不认为使用close而不是cancel有什么问题。不过,如果没有一些代码来分析,就很难提供很多帮助或建议。
请注意,一些Windows平台在取消未完成的异步操作时存在问题。如果您的应用程序需要支持文档有建议,则可移植取消。
https://stackoverflow.com/questions/5672621
复制相似问题