首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于事件的openssl bio

基于事件的openssl bio
EN

Stack Overflow用户
提问于 2020-10-20 18:48:44
回答 1查看 299关注 0票数 10

我在https://gist.github.com/darrenjs/4645f115d10aa4b5cebf57483ec82eca上找到了使用openssl BIO实现“非阻塞”套接字IO的示例代码。

但是在主函数中,poll只监听stdin和套接字fd。poll从不监听rbio和wbio。

这是否意味着函数BIO_writeBIO_read正在阻塞?如果它们是阻塞的,那么代码就是阻塞的,对吗?如果它们没有阻塞,为什么poll函数不侦听BIOs?

我尝试使用BIO_get_fd函数,但它总是返回0。我认为它不应该将fd创建为默认值。我尝试用*bio = BIO_new(BIO_s_fd())初始化BIO,但BIO_get_fd仍然返回0。

我使用BIO_set_fd函数创建了两个管道int pipes[2][2],并将管道提供给rbio,将pipes1提供给wbio。BIO_write就是这样工作的。但是SSL_read函数失败,并返回错误SSL_ERROR_SYSCALL,我认为这意味着SSL_read试图读取管道。我知道管道作为一种方式使用,就像;管道将用于读取,pipe1将用于写入。但我找不到方法将管道pipe1设置为相同的BIO。

可以实现到openssl BIOs的管道吗?

如果不可能,我怎么能说openssl来创建他们的BIO fd,这样我就可以在轮询/epoll/等中使用fd了?

注意:我的主要目标是在SSL/BIO函数中不使用套接字fd的情况下进行基于事件的BIO。我将处理套接字fd和BIO fd之间的数据传输。

EN

回答 1

Stack Overflow用户

发布于 2020-11-15 23:07:58

poll只需要监听stdinsocket.fd,因为这是rbio获取数据的地方,也是wbio写入的地方。

BIO_writeBIO_read就像它们的底层媒介一样阻塞。在网络情况下,它们可以被认为是阻塞的。但在您的示例中,它们都是BIO_s_mem,纯基于内存的BIO。因此,您可以认为它们是非阻塞的。

跳过这一步,几乎可以在任何东西上创建个人简介。如果你有一个文件描述符(FD),那么你不需要做任何事情,只需要使用BIO_s_fd。如果由于某些原因你不喜欢它,你可以随时实现你自己的简历。这并不太难,有几个例子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64443580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档