小编int*_*ium的帖子

将OpenSSL BIO从阻塞模式更改为非阻塞模式

我有一个多线程应用程序,它在C中大量使用OpenSSL.它的设计理念是它的所有SSL连接都会被阻塞.具体来说,阻止BIO.它们都被分配到单个传入端口,如下所示:

ssl = SSL_new(ctx);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
sock = BIO_new_socket(socket, BIO_CLOSE);
SSL_set_bio(ssl, sock, sock);
Run Code Online (Sandbox Code Playgroud)

事实证明,代码库中有一些小部分使用非阻塞BIO是最佳选择.受益于非阻塞BIO的小部件无法知道哪些SSL连接属于它们.因此,他们总是会收到封锁的BIO.

问题是,阻止BIO可以改为非阻塞吗?

我知道BIO_set_nbio可用于使BIO无阻塞,但文档说:

在建立连接之前应该调用BIO_set_nbio(),因为在连接过程中设置了非阻塞I/O.

我想到的另一个可能的选择是复制BIO并重新创建它,同时以某种方式保持所有状态.

c openssl

7
推荐指数
1
解决办法
8296
查看次数

标签 统计

c ×1

openssl ×1