c++ - boost read()永远不会返回,即使在服务器(ssl)boost上执行了写入

标签 c++ sockets ssl boost tcp

我有一个异步运行的服务器和一个同步运行的客户端。

客户端和服务器进行握手,然后进行 SSL 握手。客户端向服务器发送消息,服务器读取消息(我可以正确打印出来),然后服务器发回响应 boost::async_write。响应离开服务器,读取在客户端 boost::read() 上执行,但客户端永远不会从读取命令返回。最终请求超时并抛出异常(request timed out)。

服务端是异步的,客户端是同步的。

请注意,在没有 SSL 的情况下,一切正常,但在使用 SSL 的情况下,上述情况就会出现。我在 Wireshark 中看到握手工作正常并且 SSL 和 TCP 握手都是正确的。此外,当客户端发送第一条消息 boost::write() 时,服务器可以完美地解密和读取它 (boost::read_async)。服务器完美地发回消息(boost:write_async)......但由于某种原因,客户端永远不会从读取中返回! (只有在 SSL 情况下,普通 TCP 才能正常工作)。

Boost 版本是 1.48 ... 我真的很困惑 TCP 如何正常工作而 SSL 不起作用(但根据上面的情况,它与加密方面无关)​​。我必须做一些与目前不同的事情吗?

最佳答案

问题是出于某种原因,我传递的其中一条消息的 header 超出了范围。在函数的堆栈上声明 header ,然后将其传递给异步发送将不能保证该 header 的内存已完全传递给函数。在异步情况下, header 必须具有更持久的范围(例如堆、成员变量等)。

关于c++ - boost read()永远不会返回,即使在服务器(ssl)boost上执行了写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31768842/

相关文章:

firefox - 仅在 Firefox 上误报 SSL "Peer' s 证书已被撤销

c++ - 如何在C中按顺序对带有数字和字母的文件名进行排序?

c++ - 不明确的 C++ 编译器错误

c++ - 为什么窗口在调用函数时需要大小?

ssl - 绑定(bind) : Permission denied (13) with stunnel for set https

apache - Haproxy "send-proxy"未知协议(protocol)——不是说 SSL 到 HTTPS 端口吗?

c++ - 多线程程序生产者/消费者 [boost]

sockets - 未创建 uwsgi 套接字

java - Java 中的 SocketChannel 发送数据,但没有到达目标应用程序

C# void ReceiveData(IAsyncResult iar)