我使用的example from boost有三个小的差别:
io_service
> TLS v1.1
线程简单地并行处理各种连接
void server::start()
{
for (std::size_t i = 0; i < thread_pool_size_; i++) {
threads_.push_back(std::thread([&]() {
io_service_.run();
}));
}
for (auto & t : threads_) {
t.join();
}
}
上下文参数是:
ctx.set_options(boost::asio::ssl::context::default_workarounds
|boost::asio::ssl::context::no_sslv2
|boost::asio::ssl::context::no_sslv3
|boost::asio::ssl::context::no_tlsv1
|boost::asio::ssl::context::no_tlsv1_1
|boost::asio::ssl::context::single_dh_use);
除此之外,connection
类在内部控制ssl_socket
,
它遵循以下回调链:
ctor
-> start
-> async_handshake
-> read_header
-> async_read_until
-> process_header
...
如果我用明文套接字ip::tcp::socket
替换SSL套接字,那么一切正常。
使用SSL套接字时,我不断获得called a function you should not call
。
GDB显示这来自async_handshake
。阅读this SO post后,我设法获取了错误代码:
(20,197,66) error:140C5042:SSL routines:ssl_undefined_function:called a function you should not call
。
我在Ubuntu 16.04上使用Boost 1.58。 关于为什么会发生这种情况,可能导致它的原因,或者我可能做错了什么的任何帮助?
如果重要,我正在使用curl
标记-insecure
进行测试。
尝试没有限制性协议标志,并通过设置密码回调 - 问题仍然存在。
答案 0 :(得分:1)
似乎以下行触发了问题:
context_(io_service, boost::asio::ssl::context::tlsv12_client)
我应该更加关注我的代码(复制粘贴是所有邪恶的根源):
违规行在context
构造函数中:
ctx_(io_service, boost::asio::ssl::context::tlsv12_client)
我已替换为server
版本:
context_(io_service, boost::asio::ssl::context::tlsv12_server)
boost的实现标头中的full list is hidden。 在这里插入 big facepalm : - )