|
NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
|
SSL/TLS安全Socket类 更多...
#include <ssl_socket.hpp>
Public 成员函数 | |
| ssl_socket ()=default | |
| 默认构造函数 | |
| ssl_socket (const native_handle_type fd) | |
| 从原生句柄构造 | |
| ssl_socket (tcp_socket sock) | |
| 从TCP socket转移构造 | |
| ~ssl_socket () override=default | |
| 析构函数 | |
| void | init_server_ssl (const ssl_context &ctx) |
| 初始化服务器端SSL | |
| void | init_client_ssl (const ssl_context &ctx, const string &hostname="") |
| 初始化客户端端SSL | |
| string | peer_certificate_info () const |
| 获取对等方证书信息 | |
| string | get_alpn_negotiated () const |
| 获取ALPN协商的协议名称 | |
| ssize_t | send (memory_view< const char > data, int flags=0) override |
| 发送加密数据 | |
| ssize_t | receive (memory_view< char > buffer, int flags=0) override |
| 接收解密数据 | |
| bool | close () noexcept override |
| 关闭SSL连接和底层socket | |
| bool | is_ssl () const noexcept override |
| 检查是否为SSL/TLS socket | |
| ssl_stream & | ssl () |
| 获取SSL流对象的引用 | |
| const ssl_stream & | ssl () const |
| 获取SSL流对象的常量引用 | |
| Public 成员函数 继承自 neforce::tcp_socket | |
| tcp_socket ()=default | |
| 默认构造函数 | |
| tcp_socket (tcp_socket &&)=default | |
| 移动构造函数 | |
| tcp_socket & | operator= (tcp_socket &&)=default |
| 移动赋值运算符 | |
| tcp_socket (native_handle_type fd) | |
| 从原生句柄构造 | |
| ~tcp_socket () override=default | |
| 析构函数 | |
| void | open (family f=family::INET4) |
| 打开TCP socket | |
| bool | connect (const ip_address &endpoint, milliseconds timeout, bool was_blocking=true) |
| 连接到远程服务器 | |
| ssize_t | send (memory_view< const char > data, milliseconds timeout, int flags=0) |
| 带超时的发送数据 | |
| void | send_all (memory_view< const char > data) |
| 发送所有数据 | |
| vector< char > | receive_all (size_t expected_size) |
| 接收指定大小的所有数据 | |
| void | async_connect (io_context &ctx, const ip_address &endpoint, function< void(error_code)> handler) |
| 异步连接到远程端点 | |
| void | async_connect (io_context &ctx, const ip_address &endpoint, cancellation_slot &slot, function< void(error_code)> handler) |
| 异步连接(带取消槽) | |
| void | async_read (io_context &ctx, memory_view< char > buffer, function< void(error_code, size_t)> handler) override |
| 异步读取数据 | |
| void | async_read (io_context &ctx, memory_view< char > buffer, cancellation_slot &slot, function< void(error_code, size_t)> handler) override |
| 异步读取(带取消槽) | |
| void | async_write (io_context &ctx, memory_view< const char > buffer, function< void(error_code, size_t)> handler) override |
| 异步写入数据 | |
| void | async_write (io_context &ctx, memory_view< const char > buffer, cancellation_slot &slot, function< void(error_code, size_t)> handler) override |
| 异步写入(带取消槽) | |
| void | async_receive (io_context &ctx, memory_view< char > buffer, function< void(error_code, size_t)> handler) |
| 异步接收(转发到 async_read) | |
| void | async_receive (io_context &ctx, memory_view< char > buffer, cancellation_slot &slot, function< void(error_code, size_t)> handler) |
| 异步接收(带取消槽,转发到 async_read) | |
| void | async_send (io_context &ctx, memory_view< const char > buffer, function< void(error_code, size_t)> handler) |
| 异步发送(转发到 async_write) | |
| void | async_send (io_context &ctx, memory_view< const char > buffer, cancellation_slot &slot, function< void(error_code, size_t)> handler) |
| 异步发送(带取消槽,转发到 async_write) | |
| template<typename Token, enable_if_t<!is_same_v< decay_t< Token >, function< void(error_code, size_t)> >, int > = 0> | |
| decltype(auto) | async_receive (io_context &ctx, memory_view< char > buffer, Token &&token) |
| 异步接收—模板令牌版本(转发到 async_read) | |
| template<typename Token, enable_if_t<!is_same_v< decay_t< Token >, function< void(error_code, size_t)> >, int > = 0> | |
| decltype(auto) | async_send (io_context &ctx, memory_view< const char > buffer, Token &&token) |
| 异步发送—模板令牌版本(转发到 async_write) | |
| template<typename Token, enable_if_t<!is_same_v< decay_t< Token >, function< void(error_code)> >, int > = 0> | |
| void | async_connect (io_context &ctx, const ip_address &endpoint, Token &&token) |
| 异步连接—任意可调用对象版本 | |
| auto | async_connect (io_context &ctx, const ip_address &endpoint, use_future_t) |
| 异步连接—use_future | |
| void | async_connect (io_context &ctx, const ip_address &endpoint, detached_t) |
| 异步连接—detached(即发即忘) | |
| auto | async_connect (io_context &ctx, const ip_address &endpoint, use_awaitable_t) |
| 异步连接—use_awaitable | |
| Public 成员函数 继承自 neforce::ip_socket | |
| ip_socket ()=default | |
| 默认构造函数 | |
| ip_socket (const native_handle_type fd) noexcept | |
| 从原生句柄构造 | |
| ~ip_socket () override=default | |
| 析构函数 | |
| family | address_family () const noexcept |
| 获取地址族 | |
| bool | is_ipv4 () const noexcept |
| 检查是否为IPv4 socket | |
| bool | is_ipv6 () const noexcept |
| 检查是否为IPv6 socket | |
| virtual void | connect (const ip_address &endpoint) |
| 连接到远程端点(TCP客户端) | |
| Public 成员函数 继承自 neforce::socket_base | |
| socket_base () | |
| 默认构造函数 | |
| socket_base (const native_handle_type fd) noexcept | |
| 从原生句柄构造 | |
| socket_base (socket_base &&other) noexcept | |
| 移动构造函数 | |
| socket_base & | operator= (socket_base &&other) noexcept |
| 移动赋值运算符 | |
| virtual | ~socket_base () |
| 析构函数 | |
| native_handle_type | native_handle () const noexcept |
| 获取原生句柄 | |
| bool | is_open () const noexcept |
| 检查socket是否已打开 | |
| operator bool () const noexcept | |
| 布尔转换运算符 | |
| void | open (family f, type t=type::STREAM, protocol p=protocol::AUTO) |
| 打开socket | |
| bool | try_open (family f, type t=type::STREAM, protocol p=protocol::AUTO) noexcept |
| 尝试打开socket | |
| bool | is_nonblocking () const noexcept |
| 查询是否为非阻塞模式 | |
| bool | set_nonblocking (bool enable) noexcept |
| 设置非阻塞模式 | |
| bool | shutdown_send () noexcept |
| 关闭发送方向 | |
| bool | shutdown_receive () noexcept |
| 关闭接收方向 | |
| bool | shutdown_both () noexcept |
| 关闭双向通信 | |
| bool | set_option (int level, int optname, const void *value, ::socklen_t len) noexcept |
| 设置socket选项 | |
| bool | get_option (int level, int optname, void *optval, ::socklen_t *optlen) const noexcept |
| 获取socket选项 | |
| bool | get_reuse_address () const noexcept |
| 查询地址重用 | |
| bool | set_reuse_address (bool enable=true) noexcept |
| 设置地址重用 | |
| bool | get_reuse_port () const noexcept |
| 查询端口重用 | |
| bool | set_reuse_port (bool enable=true) noexcept |
| 设置端口重用 | |
| bool | get_keep_alive () const noexcept |
| 查询TCP KeepAlive | |
| bool | set_keep_alive (bool enable=true) noexcept |
| 设置TCP KeepAlive | |
| bool | get_tcp_nodelay () const noexcept |
| 查询Nagle算法 | |
| bool | set_tcp_nodelay (bool enable=true) noexcept |
| 设置禁用Nagle算法 | |
| int | get_receive_buffer_size () const noexcept |
| 查询接收缓冲区大小 | |
| bool | set_receive_buffer_size (int size) noexcept |
| 设置接收缓冲区大小 | |
| int | get_send_buffer_size () const noexcept |
| 查询发送缓冲区大小 | |
| bool | set_send_buffer_size (int size) noexcept |
| 设置发送缓冲区大小 | |
| optional< milliseconds > | get_send_timeout () const noexcept |
| 获取发送超时时间 | |
| bool | set_send_timeout (milliseconds timeout) noexcept |
| 设置发送超时时间 | |
| optional< milliseconds > | get_receive_timeout () const noexcept |
| 获取接收超时时间 | |
| bool | set_receive_timeout (milliseconds timeout) noexcept |
| 设置接收超时时间 | |
| optional< ip_address > | local_endpoint () const |
| 获取本地端点地址 | |
| optional< ip_address > | remote_endpoint () const |
| 获取远程端点地址 | |
| void | bind (const ip_address &endpoint) |
| 绑定socket到本地地址 | |
| void | listen (int backlog) |
| 开始监听连接(TCP) | |
| native_handle_type | release () noexcept |
| 释放socket所有权 | |
| Public 成员函数 继承自 neforce::async_stream | |
| virtual | ~async_stream ()=default |
| 析构函数 | |
| template<typename Token, enable_if_t<!is_same_v< decay_t< Token >, function< void(error_code, size_t)> >, int > = 0> | |
| void | async_read (io_context &ctx, memory_view< char > buffer, Token &&token) |
| 异步读取—任意可调用对象 | |
| auto | async_read (io_context &ctx, memory_view< char > buffer, use_future_t) |
| 异步读取—use_future | |
| void | async_read (io_context &ctx, memory_view< char > buffer, detached_t) |
| 异步读取—detached(即发即忘) | |
| auto | async_read (io_context &ctx, memory_view< char > buffer, use_awaitable_t) |
| 异步读取—use_awaitable | |
| template<typename Token, enable_if_t<!is_same_v< decay_t< Token >, function< void(error_code, size_t)> >, int > = 0> | |
| void | async_write (io_context &ctx, memory_view< const char > buffer, Token &&token) |
| 异步写入—任意可调用对象 | |
| auto | async_write (io_context &ctx, memory_view< const char > buffer, use_future_t) |
| 异步写入—use_future | |
| void | async_write (io_context &ctx, memory_view< const char > buffer, detached_t) |
| 异步写入—detached(即发即忘) | |
| auto | async_write (io_context &ctx, memory_view< const char > buffer, use_awaitable_t) |
| 异步写入—use_awaitable | |
| void | async_read (io_context &ctx, mutable_buffers &bufs, function< void(error_code, size_t)> handler) |
| 异步读取—scatter-gather | |
| void | async_write (io_context &ctx, const_buffers &bufs, function< void(error_code, size_t)> handler) |
| 异步写入—scatter-gather | |
| void | async_read (io_context &ctx, dynamic_buffer &buf, size_t n, function< void(error_code, size_t)> handler) |
| 异步读取到 dynamic_buffer | |
额外继承的成员函数 | |
| Public 类型 继承自 neforce::socket_base | |
| enum class | type : int32_t { STREAM = SOCK_STREAM , DGRAM = SOCK_DGRAM , RAW = SOCK_RAW , RDM = SOCK_RDM , SEQPACKET = SOCK_SEQPACKET , CLOEXEC = SOCK_CLOEXEC , NONBLOCK = SOCK_NONBLOCK , DCCP = SOCK_DCCP } |
| socket 类型枚举 更多... | |
| enum class | protocol : int32_t { AUTO = 0 , ICMP = IPPROTO_ICMP , TCP = IPPROTO_TCP , UDP = IPPROTO_UDP , SCTP = IPPROTO_SCTP , RAW = IPPROTO_RAW , ESP = IPPROTO_ESP , AH = IPPROTO_AH , DCCP = IPPROTO_DCCP , IP = ETH_P_IP , ARP = ETH_P_ARP , IPV6 = ETH_P_IPV6 , LAT = ETH_P_LAT , VLAN = ETH_P_8021Q , LLDP = ETH_P_LLDP , MPLS = ETH_P_MPLS_UC } |
| socket 协议枚举 更多... | |
| using | native_handle_type |
| 平台原生句柄类型 | |
| using | family = ip_address::family |
| 网络地址族类型 | |
| 静态 Public 属性 继承自 neforce::socket_base | |
| static constexpr native_handle_type | invalid_handle |
| 无效句柄常量 | |
| Protected 属性 继承自 neforce::ip_socket | |
| family | family_ = family::UNDEF |
| 地址族 | |
| Protected 属性 继承自 neforce::socket_base | |
| native_handle_type | fd_ = invalid_handle |
| Socket句柄 | |
| bool | nonblocking_ {false} |
| 非阻塞模式状态跟踪 | |
SSL/TLS安全Socket类
实现SSL/TLS加密的TCP socket,提供安全的网络通信。 继承自tcp_socket,可以透明地替换普通TCP socket。
主要功能:
使用示例:
在文件 ssl_socket.hpp 第 74 行定义.
|
inlineexplicit |
|
inlineexplicit |
从TCP socket转移构造
| sock | TCP socket对象 |
将普通TCP socket转换为SSL socket。 适用于接受连接后升级为TLS的场景。
在文件 ssl_socket.hpp 第 98 行定义.
|
overridevirtualnoexcept |
|
nodiscard |
获取ALPN协商的协议名称
TLS握手完成后通过ALPN协商确定的应用层协议。 需要在init_server_ssl()或init_client_ssl()之后调用。
| void neforce::ssl_socket::init_client_ssl | ( | const ssl_context & | ctx, |
| const string & | hostname = "" ) |
初始化客户端端SSL
| ctx | SSL上下文(需已加载CA证书) |
| hostname | 服务器主机名(用于SNI和证书验证) |
| ssl_exception | SSL握手失败时抛出 |
| value_exception | socket未打开时抛出 |
作为客户端发起SSL/TLS握手。需要在连接建立后调用。
| void neforce::ssl_socket::init_server_ssl | ( | const ssl_context & | ctx | ) |
初始化服务器端SSL
| ctx | SSL上下文(需已加载CA证书) |
| ssl_exception | SSL握手失败时抛出 |
| value_exception | socket未打开时抛出 |
作为服务器端执行SSL/TLS握手。需要在连接建立后调用。
|
inlinenodiscardoverridevirtualnoexcept |
检查是否为SSL/TLS socket
重载 neforce::tcp_socket .
在文件 ssl_socket.hpp 第 180 行定义.
引用了 is_ssl().
被这些函数引用 is_ssl().
|
nodiscard |
获取对等方证书信息
返回对等方证书的可读信息,用于调试和验证。
|
overridevirtual |
接收解密数据
| buffer | 接收缓冲区 |
| flags | 接收标志(忽略) |
| ssl_exception | 接收失败时抛出 |
如果TLS已激活,通过ssl_stream接收解密数据;否则回退到普通接收。
重载 neforce::tcp_socket .
|
overridevirtual |
发送加密数据
| data | 要发送的数据 |
| flags | 发送标志(忽略) |
| ssl_exception | 发送失败时抛出 |
如果TLS已激活,通过ssl_stream发送加密数据;否则回退到普通发送。
重载 neforce::tcp_socket .
引用了 neforce::data().
|
inlinenodiscard |
|
inlinenodiscard |