OpenSSL 3.5.0中已弃用BIO_meth_get_*()函数的替代方案咨询
OpenSSL 3.5.0 弃用 BIO_meth_get_*() 函数后的代码改写方案
OpenSSL 3.5.0 弃用了 BIO_meth_get_*() 系列函数且未提供直接替代接口,以下是针对原代码的适配改写方案:
原代码片段
BIO_METHOD *_bio = BIO_meth_new(BIO_TYPE_SOCKET, "mysslsocket"); BIO_METHOD *tbio = _bio->Bio(); //Bio() method just returns _bio object const BIO_METHOD *biom = BIO_s_socket(); BIO_meth_set_gets(tbio, BIO_meth_get_gets(biom)); BIO_meth_set_puts(tbio, BIO_meth_get_puts(biom)); BIO_meth_set_ctrl(tbio, BIO_meth_get_ctrl(biom)); BIO_meth_set_create(tbio, BIO_meth_get_create(biom)); BIO_meth_set_destroy(tbio, BIO_meth_get_destroy(biom)); BIO_meth_set_callback_ctrl(tbio, BIO_meth_get_callback_ctrl(biom)); auto wbio = BIO_new(tbio);
适配OpenSSL 3.5.0的改写代码
// 复制标准socket类型的BIO_METHOD所有属性与回调 const BIO_METHOD *biom = BIO_s_socket(); BIO_METHOD *tbio = BIO_meth_dup(biom); // 若需保留自定义名称,设置新的BIO_METHOD名称 BIO_meth_set_name(tbio, "mysslsocket"); auto wbio = BIO_new(tbio);
关键改动说明
- 使用
BIO_meth_dup()函数直接复制目标BIO_METHOD的所有回调方法(gets/puts/ctrl等)和属性,替代原有的逐个获取再设置的冗余操作 - 原代码中
BIO_meth_new()创建空BIO_METHOD再手动填充的流程可完全替换为BIO_meth_dup(),符合3.5.0版本的API规范 - 若需要自定义BIO_METHOD的名称,调用
BIO_meth_set_name()修改即可
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

