boost::asio::ssl::stream<boost::asio::ip::tcp::socket>::shutdown() 做什么?
What does boost::asio::ssl::stream<boost::asio::ip::tcp::socket>::shutdown() do?
广泛的文档很有帮助地说:
此函数用于关闭流上的 SSL。函数调用将阻塞,直到 SSL 关闭或发生错误。
这给我留下了这些问题:
- 这是否也会关闭实际连接?
- 如果没有,我该怎么做?
- 我可以通过再次调用
boost::asio::connect(theSocket.lowest_layer(), ...
来重复使用流吗?
在幕后,asio 调用底层 OpenSSL 库中的SSL_Shutdown()
:
其文档在这里:
https://www.openssl.org/docs/manmaster/ssl/SSL_shutdown.html
。并包含以下不祥的文本:
SSL_shutdown(( 的行为还取决于底层 BIO。
然而,我对事物的理解是,ssl::stream
对象不是套接字(设计使然(,而更像是位于类似Stream
对象的协议层。因此asio::ssl
层不知道它next_layer()
,除了它必须支持自由函数read
、write
、async_read
和async_write
。当然不知道该层是否支持shutdown()
(甚至close()
(的概念。
因此,我希望lowest_layer()
给出的基础套接字在返回时shutdown()
仍然打开。此外,我希望shutdown()
不会被召唤到lowest_layer()
.您需要在ssl::shutdown
返回后或在传递给ssl::async_shutdown
的处理程序中执行此操作
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- 程序崩溃使用boost::asio
- boost::asio 无法捕获 SIGINT
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- std::boost::asio::p ost / dispatch 使用哪个io_context?