【发布时间】:2015-10-24 11:18:22
【问题描述】:
我有一个异步运行的服务器和一个同步运行的客户端。
客户端和服务器进行握手,然后进行 SSL 握手。客户端向服务器发送消息,服务器读取消息(我可以正确打印出来),然后服务器发回响应boost::async_write。响应离开服务器,读取正在客户端boost::read() 上执行,但客户端永远不会从读取命令返回。最终请求超时并引发异常(请求超时)。
服务器是异步的,客户端是同步的。
请注意,如果没有 SSL,一切都会正常工作,但如果使用 SSL,上述场景就会展开。我在 Wireshark 中查看过握手工作正常,并且 SSL 和 TCP 握手都是正确的。另外,当客户端发送第一条消息boost::write()时,服务器可以完美地解密和读取它(boost::read_async)。服务器完美地发回消息(boost:write_async)......但客户端由于某种原因永远不会从阅读中返回! (仅在 SSL 情况下,正常 TCP 工作正常)。
Boost 版本是 1.48 ......我真的很困惑 TCP 怎么能正常工作而 SSL 不能工作(但根据上面的场景,它与加密方面无关)。在 boost 中我必须做的事情与我目前所做的不同吗?
【问题讨论】:
-
这是一个编程问题,还是应该放在服务器故障上的问题?
-
我会这样认为,因为结果可能是一些需要使用 boost 更改的代码?
-
一些代码比如什么?
-
我会假设...在读取功能中我需要更改某些内容...或者可能需要在消息末尾添加某种类型的分隔符?它可能与一种方式是同步的,另一种是异步的(使用 ssl?)有关。
-
由于您使用的是加密流,它们至少会缓冲到另一个块,可能是 16 个字节,但取决于加密算法。尝试在写入后在两端刷新流。