【发布时间】:2016-12-22 10:11:00
【问题描述】:
我正在使用 boost asio 进行网络连接,我注意到当我切换到 ssl 时,我的网络代码不再工作了。问题似乎是这里的这一行:
boost::asio::async_read(socket_, boost::asio::buffer(inbound_header_),
boost::bind(&connection::handle_read_header<Handler>,
this, boost::asio::placeholders::error,
boost::make_tuple(handler)));
现在据我了解,这应该始终在调用处理程序之前读取 inbound_header_.size() 字节。它在大多数情况下都有效。但有时它只会读取 0 个字节并且仍然使用错误代码 0 调用处理程序。我做错了什么吗?我从 boost asio 序列化示例中复制了该代码,所以我认为这应该可以工作。
最小工作样本here 在 Ubuntu 16.04 上使用 boost 1.61.0 测试 Assert in connection::handle_read_header 几乎每次都在启动后的前几秒内被命中。
【问题讨论】:
-
可以提供minimal reproducible example吗?可能有多种原因(例如,
inbound_header_.size()是0;未能满足socket_的线程安全要求;低级驱动程序违反 API 合同等)。 -
在起始帖子中添加了一个
-
对于后代,minimal reproducible example 应该是最小的,通常是从头开始创建的,并且包含在原始问题中。外部链接及其可能包含的关键信息可能会消失。
标签: c++ ssl boost boost-asio