gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:43:32 26 4
gpt4 key购买 nike

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

客户端和服务器进行握手,然后进行 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com