You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:18:19