Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost read()从不返回在服务器(ssl)boost上执行写操作的事件_C++_Sockets_Ssl_Boost_Tcp - Fatal编程技术网

C++ boost read()从不返回在服务器(ssl)boost上执行写操作的事件

C++ boost read()从不返回在服务器(ssl)boost上执行写操作的事件,c++,sockets,ssl,boost,tcp,C++,Sockets,Ssl,Boost,Tcp,我有一个异步运行的服务器和一个同步运行的客户端 客户端和服务器进行握手,然后进行SSL握手。客户端向服务器发送消息,服务器读取消息(我可以正确打印出来),然后服务器返回响应boost::async_write。响应离开服务器,读取在客户机上执行,但客户机从未从读取命令返回。最终,请求超时并引发异常(请求超时) 服务器是异步的,客户端是同步的 请注意,没有SSL,一切都正常工作,但有了SSL,上述场景就会展开。我在Wireshark中看到,握手工作正常,SSL和TCP握手都正确。另外,当客户端发送

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

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

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

请注意,没有SSL,一切都正常工作,但有了SSL,上述场景就会展开。我在Wireshark中看到,握手工作正常,SSL和TCP握手都正确。另外,当客户端发送第一条消息时,服务器可以完美地解密和读取它(
boost::read\u async
)。服务器完美地发回消息(boost:write_async)。。。但是,由于某种原因,客户永远不会从阅读中返回!!(只有在SSL情况下,正常TCP才能正常工作)


Boost版本是1.48。。。我真的很困惑,TCP怎么能工作得很好,SSL怎么能不工作(但根据上面的场景,它与加密方面没有任何关系)。我在boost中是否需要做一些与当前不同的事情?

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

这是一个编程问题还是一个可能导致服务器故障的问题?我会这样假设,因为结果可能是需要使用boost更改的某段代码?某段代码,例如什么?我会假设。。。在read函数中有一些东西我需要更改。。。或者可能需要在消息末尾添加某种类型的分隔符?这可能与一种方式是同步的,另一种方式是异步的(使用ssl?)有关。因为您使用的是加密流,所以它们至少会缓冲到另一个块,可能是16字节,但取决于加密算法。尝试在写入后在两端刷新流。