【发布时间】:2019-09-05 08:16:17
【问题描述】:
我正在使用基于事件的网络库(使用 epoll)编写 HTTP 代理服务器。
假设上游有一个快速的 HTTPS,下游有一个慢速的 HTTP(S)。所以我必须将上游数据存储到缓冲区,并在缓冲区已满时从网络库中分离上游读取事件。
但正如我们所知,SSL_read 可能会部分返回数据。所以考虑以下情况:
- 缓冲区大小为
32,并在网络库上附加读取事件 - 上游发送
32字节和整个HTTP消息是32字节 - 网络库调用读取事件回调
- 调用
SSL_read(ssl, buf, 32)和SSL_read返回16 - 将
16字节发送到下游并在网络库上附加读取事件 - 永远不会调用读取回调,因为剩余的 16 个字节在 openssl 缓冲区中,并且没有更多来自上游的字节
那么有什么好的解决办法吗?
【问题讨论】:
标签: c++ c openssl network-programming