锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / openssl开源 / 有关openssl缓冲和异步IO问题
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

有关openssl缓冲和异步IO问题


我们Windows平台上基于OpenSSL的服务器是IO完成端口的非阻塞IO构建的。一切都非常高效和快速,但双缓冲存在一个棘手的问题。

实质上,当OpenSSL调用BIO_write时,我们的应用程序缓冲要发送的数据,并在此缓冲区上启动IOCP写入请求并成功返回。如果有挂起的IOCP请求,我们调用BIO_set_retry_write并返回失败。

同样,当OpenSSL调用BIO_read时,我们会满足来自完成IOCP请求的缓冲区的请求。如果缓冲区中没有数据,我们将调用BIO_set_retry_read并返回失败。

按如下升级后可以更高效:

BIO_write可以立即调用BIO_set_retry_write并返回失败,同时还会对调用中收到的缓冲区上发起IOCP写入请求。当IOCP请求成功完成时,BIO_write重试调用就满足了。

BIO_read可以启动IOCP_read,并再次调用BIO_set_retry_read并返回失败。当IOCP请求成功完成时,BIO_read重试调用可以满足了。

然而,要实现这个功能,必须保证OpenSSL在重试BIO_read时使用相同的缓冲区,并且至少与最初请求的数据一样多。当然,这两个调用之间的缓冲区必须保持有效。另外,当重试BIO_write时,调用必须用于相同的缓冲区并且至少与原来写入的数据相同 - 并且在两次调用期间缓冲区必须保持不变。

这是我们能指望的吗?通过不必将数据复制到临时缓冲区,我们可以节省相当多的CPU时间和内存。

在此先感谢,

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内