广泛的documentation有用地说:
此功能用于关闭流上的SSL。函数调用将阻塞,直到SSL关闭或发生错误。
这让我想到了这些问题:
boost::asio::connect(theSocket.lowest_layer(), ...
重新使用该流吗?答案 0 :(得分:2)
在幕后,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
的处理程序中执行此操作