NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
ssl_acceptor类 参考final

SSL/TLS服务器Acceptor类 更多...

#include <ssl_acceptor.hpp>

类 ssl_acceptor 继承关系图:
[图例]

Public 成员函数

 ssl_acceptor ()=default
 默认构造函数
void set_ssl_context (ssl_context ctx)
 设置SSL上下文
NEFORCE_NODISCARD ssl_contextcontext () noexcept
 获取SSL上下文引用
NEFORCE_NODISCARD const ssl_contextcontext () const noexcept
 获取SSL上下文常量引用
NEFORCE_NODISCARD ssl_socket accept_ssl ()
 接受TLS客户端连接
Public 成员函数 继承自 tcp_acceptor
 tcp_acceptor ()=default
 默认构造函数
void open (const ip_address &endpoint, int backlog=SOMAXCONN)
 打开并开始监听
NEFORCE_NODISCARD tcp_socket accept ()
 接受客户端连接(阻塞模式)
NEFORCE_NODISCARD optional< tcp_socketaccept_nonblock ()
 接受客户端连接(非阻塞模式)
Public 成员函数 继承自 ip_socket
 ip_socket ()=default
 默认构造函数
 ip_socket (const native_handle_type fd) noexcept
 从原生句柄构造
 ~ip_socket () override=default
 析构函数
NEFORCE_NODISCARD int address_family () const noexcept
 获取地址族
NEFORCE_NODISCARD bool is_ipv4 () const noexcept
 检查是否为IPv4 socket
NEFORCE_NODISCARD bool is_ipv6 () const noexcept
 检查是否为IPv6 socket
virtual void connect (const ip_address &endpoint)
 连接到远程端点(TCP客户端)
bool close () noexcept override
 关闭socket
Public 成员函数 继承自 socket_base
 socket_base ()
 默认构造函数
 socket_base (const native_handle_type fd) noexcept
 从原生句柄构造
 socket_base (socket_base &&other) noexcept
 移动构造函数
socket_baseoperator= (socket_base &&other) noexcept
 移动赋值运算符
virtual ~socket_base ()
 析构函数
NEFORCE_NODISCARD native_handle_type native_handle () const noexcept
 获取原生句柄
NEFORCE_NODISCARD bool is_open () const noexcept
 检查socket是否已打开
 operator bool () const noexcept
 布尔转换运算符
void open (int family, int type, int protocol)
 打开socket
bool try_open (int family, int type, int protocol) noexcept
 尝试打开socket(不抛出异常)
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 set_reuse_address (bool enable=true) noexcept
 设置地址重用(SO_REUSEADDR)
bool set_reuse_port (bool enable=true) noexcept
 设置端口重用(SO_REUSEPORT)
bool set_keep_alive (bool enable=true) noexcept
 设置TCP KeepAlive
bool set_tcp_nodelay (bool enable=true) noexcept
 设置TCP_NODELAY(禁用Nagle算法)
bool set_receive_buffer_size (int size) noexcept
 设置接收缓冲区大小
bool set_send_buffer_size (int size) noexcept
 设置发送缓冲区大小
bool set_send_timeout (milliseconds timeout) noexcept
 设置发送超时时间
bool set_receive_timeout (milliseconds timeout) noexcept
 设置接收超时时间
NEFORCE_NODISCARD optional< ip_addresslocal_endpoint () const
 获取本地端点地址
NEFORCE_NODISCARD optional< ip_addressremote_endpoint () const
 获取远程端点地址
void bind (const ip_address &endpoint)
 绑定socket到本地地址
void listen (int backlog)
 开始监听连接(TCP)
NEFORCE_NODISCARD native_handle_type release () noexcept
 释放socket所有权

额外继承的成员函数

Public 类型 继承自 socket_base
using native_handle_type
 平台原生句柄类型
静态 Public 属性 继承自 socket_base
static constexpr native_handle_type invalid_handle
 无效句柄常量
Protected 属性 继承自 ip_socket
int family_ = AF_UNSPEC
 地址族
Protected 属性 继承自 socket_base
native_handle_type fd_ = invalid_handle
 Socket句柄

详细描述

SSL/TLS服务器Acceptor类

实现SSL/TLS服务器的连接接受功能,继承自tcp_acceptor。 自动为每个接受的连接完成SSL/TLS握手,返回加密的ssl_socket。

使用示例:

// 创建SSL上下文
ctx.load_certificate("server.crt", "server.key");
ctx.load_verify_locations("ca.crt");
ctx.require_client_certificate(); // 可选:要求客户端证书
// 创建SSL Acceptor
ssl_acceptor acceptor;
acceptor.set_ssl_context(move(ctx));
// 绑定并监听端口
auto endpoint = ip_address::any(ports::https);
acceptor.open(endpoint, 128);
println("TLS Server listening on ", endpoint);
while (true) {
try {
// 接受TLS客户端连接
auto client = acceptor.accept_ssl();
// 获取客户端地址
auto client_addr = client.remote_endpoint();
if (client_addr) {
println("New TLS connection from ", client_addr);
}
// 验证客户端证书(如果要求)
if (client.verify_peer()) {
println("Client certificate verified");
println(client.peer_certificate_info());
}
// 处理加密通信
char buffer[1024];
ssize_t received = client.receive({buffer, sizeof(buffer)});
if (received > 0) {
client.send_all({"Hello from TLS server!"});
}
} catch (const exception& e) {
println("Error: ", e.what());
}
}
static NEFORCE_NODISCARD ip_address any(ports port=ports::UNDEF, int family=AF_INET) noexcept
获取通配地址
NEFORCE_NODISCARD optional< ip_address > remote_endpoint() const
获取远程端点地址
NEFORCE_NODISCARD ssl_socket accept_ssl()
接受TLS客户端连接
void set_ssl_context(ssl_context ctx)
设置SSL上下文
ssl_acceptor()=default
默认构造函数
SSL/TLS上下文管理类
void open(const ip_address &endpoint, int backlog=SOMAXCONN)
打开并开始监听
void println(Args &&... args)
打印多个值并换行
int64_t ssize_t
有符号大小类型
@ TLS_SERVER
TLS服务器端
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
NEFORCE_NODISCARD const char * what() const noexcept
获取错误信息
注解
需要先设置有效的SSL上下文才能接受连接。 SSL上下文应包含服务器证书和私钥。

在文件 ssl_acceptor.hpp82 行定义.

成员函数说明

◆ accept_ssl()

NEFORCE_NODISCARD ssl_socket ssl_acceptor::accept_ssl ( )

接受TLS客户端连接

返回
已建立TLS连接的SSL socket
异常
socket_exception接受连接失败时抛出
ssl_exceptionSSL握手失败时抛出
value_exceptionacceptor未打开或SSL上下文无效时抛出

◆ context() [1/2]

NEFORCE_NODISCARD const ssl_context & ssl_acceptor::context ( ) const
inlinenoexcept

获取SSL上下文常量引用

返回
SSL上下文常量引用

在文件 ssl_acceptor.hpp112 行定义.

◆ context() [2/2]

NEFORCE_NODISCARD ssl_context & ssl_acceptor::context ( )
inlinenoexcept

获取SSL上下文引用

返回
SSL上下文引用

在文件 ssl_acceptor.hpp106 行定义.

◆ set_ssl_context()

void ssl_acceptor::set_ssl_context ( ssl_context ctx)

设置SSL上下文

参数
ctxSSL上下文对象
异常
ssl_exception上下文无效时抛出

设置用于TLS握手的SSL上下文。 必须在调用accept_ssl()之前调用。


该类的文档由以下文件生成: