bio
名称
bio - 基本 I/O 抽象
概要
#include <openssl/bio.h>
描述
BIO 是一种 I/O 抽象,它隐藏了应用程序许多底层的 I/O 细节。如果应用程序使用 BIO 进行 I/O,它可以透明地处理 SSL 连接、未加密的网络连接和文件 I/O。
BIO 有两种类型:源/宿 BIO 和过滤器 BIO。
顾名思义,源/宿 BIO 是数据源和/或宿,例如套接字 BIO 和文件 BIO。
过滤器 BIO 从一个 BIO 获取数据并将其传递给另一个 BIO 或应用程序。数据可能保持不变(例如消息摘要 BIO)或被转换(例如加密 BIO)。过滤器 BIO 的效果可能会根据它正在执行的 I/O 操作而改变:例如,加密 BIO 在写入时会加密数据,在读取时会解密数据。
BIO 可以连接在一起形成一个链(单个 BIO 是一个包含一个组件的链)。一个链通常由一个源/宿 BIO 和一个或多个过滤器 BIO 组成。从第一个 BIO 读取或写入的数据然后遍历链到达末端(通常是源/宿 BIO)。
一些 BIO(例如内存 BIO)可以在调用 BIO_new() 后立即使用。其他 BIO(例如文件 BIO)需要一些额外的初始化,并且通常存在一个实用程序函数来创建和初始化此类 BIO。
如果对 BIO 链调用 BIO_free(),它只会释放一个 BIO,从而导致内存泄漏。
对单个 BIO 调用 BIO_free_all() 与对其调用 BIO_free() 的效果相同,除了丢弃的返回值。
通常,type 参数由返回 BIO_METHOD 指针的函数提供。此类函数有一个命名约定:源/宿 BIO 通常以BIO_s_ 开头,过滤器 BIO 以BIO_f_ 开头。
TCP 快速打开
TCP 快速打开 (RFC7413),缩写为“TFO”,自 OpenSSL 3.2 起受 BIO 接口支持。TFO 在以下操作系统中受支持
Linux 内核 3.13 及更高版本,其中默认启用 TFO。
Linux 内核 4.11 及更高版本,使用 TCP_FASTOPEN_CONNECT。
FreeBSD 10.3 到 11.4,仅支持服务器 TFO。
FreeBSD 12.0 及更高版本,支持客户端和服务器 TFO。
macOS 10.14 及更高版本。
每个操作系统都有一个略微不同的 TFO API。在直接使用套接字时,请参阅操作系统的 API 文档。
示例
创建一个内存 BIO
BIO *mem = BIO_new(BIO_s_mem());
参见
BIO_ctrl(3),BIO_f_base64(3),BIO_f_buffer(3),BIO_f_cipher(3),BIO_f_md(3),BIO_f_null(3),BIO_f_ssl(3),BIO_f_readbuffer(3),BIO_find_type(3),BIO_get_conn_mode(3),BIO_new(3),BIO_new_bio_pair(3),BIO_push(3),BIO_read_ex(3),BIO_s_accept(3),BIO_s_bio(3),BIO_s_connect(3),BIO_s_fd(3),BIO_s_file(3),BIO_s_mem(3),BIO_s_null(3),BIO_s_socket(3),BIO_set_callback(3),BIO_set_conn_mode(3),BIO_set_tfo(3),BIO_set_tfo_accept(3),BIO_should_retry(3)
版权
版权所有 2000-2022 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0(“许可证”)获得许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。