Boost Asio SSL 第二次以后无法接收数据(第一次正常)

Jim*_*mmy 6 c++ ssl boost openssl boost-asio

我正在为简单的 RESTful 服务器开发 Boost Asio 和 Boost Beast。对于普通的 HTTP 和 TCP 套接字,它工作得很好。我用 JMeter 对它进行了负载测试,一切正常。

我尝试添加 SSL 套接字。我设置了“ssl::context”,也称为“async_handshake()”——与普通套接字相比,SSL 的附加步骤。仅在第一次时有效。客户端可以与我(服务器)连接,我也可以通过“boost::beast::http::async_read()”接收数据。

因为这是 RESTful,所以连接将在请求和响应后断开。我调用“SSL_Socket.shutdown()”,然后调用“SSL_Socket.lowest_layer().close()”来关闭 SSL 套接字。

当下一个传入请求时,客户端能够与我(服务器)连接。我调用了“SSL_Socket.async_handshake()”,然后调用了“boost::beast::http::async_read()”。但这次我无法收到任何数据。但连接已成功建立。

有人知道我错过了什么吗?

非常感谢!

Jim*_*mmy 0

我设法通过将“ssl::stream”套接字切换为“boost::optional”来解决该问题,然后在每次关闭套接字时添加“SSL_Socket.emplace(io_context, oSSLContext)”。

非常感谢 sehe 的“无法实现 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 重新连接到服务器”。他的说法“最纯粹的解决方案是不重用流/套接字对象”,太棒了!节省我的时间。

谢谢。