【发布时间】:2018-11-14 13:31:59
【问题描述】:
我正在为简单的 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()”。但这一次我无法接收任何数据。但是连接成功了。
有人知道我错过了什么吗?
非常感谢!
【问题讨论】:
-
我在尝试关闭 SSL 套接字时也注意到一个错误。 ec 返回“流被截断”。我将“SSL_Socket.shutdown()”更改为“SSL_Socket.async_shutdown()”。错误仍然发生。有谁知道如何摆脱这个错误?谢谢。
-
Beast SSL 示例服务器(例如 http-server-sync-ssl 或 http-server-async-ssl)是否有此问题?请尝试构建和测试这些示例。
标签: c++ ssl boost openssl boost-asio