|
|
| ssl_acceptor ()=default |
| | 默认构造函数
|
| void | set_ssl_context (ssl_context ctx) |
| | 设置SSL上下文
|
| NEFORCE_NODISCARD ssl_context & | context () noexcept |
| | 获取SSL上下文引用
|
| NEFORCE_NODISCARD const ssl_context & | context () const noexcept |
| | 获取SSL上下文常量引用
|
| NEFORCE_NODISCARD ssl_socket | accept_ssl () |
| | 接受TLS客户端连接
|
|
| tcp_acceptor ()=default |
| | 默认构造函数
|
| void | open (const ip_address &endpoint, int backlog=SOMAXCONN) |
| | 打开并开始监听
|
| NEFORCE_NODISCARD tcp_socket | accept () |
| | 接受客户端连接(阻塞模式)
|
| NEFORCE_NODISCARD optional< tcp_socket > | accept_nonblock () |
| | 接受客户端连接(非阻塞模式)
|
|
| 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
|
|
| 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 () |
| | 析构函数
|
| 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_address > | local_endpoint () const |
| | 获取本地端点地址
|
| NEFORCE_NODISCARD optional< ip_address > | remote_endpoint () const |
| | 获取远程端点地址
|
| void | bind (const ip_address &endpoint) |
| | 绑定socket到本地地址
|
| void | listen (int backlog) |
| | 开始监听连接(TCP)
|
| NEFORCE_NODISCARD native_handle_type | release () noexcept |
| | 释放socket所有权
|
SSL/TLS服务器Acceptor类
实现SSL/TLS服务器的连接接受功能,继承自tcp_acceptor。 自动为每个接受的连接完成SSL/TLS握手,返回加密的ssl_socket。
使用示例:
ctx.load_certificate("server.crt", "server.key");
ctx.load_verify_locations("ca.crt");
ctx.require_client_certificate();
acceptor.
open(endpoint, 128);
println(
"TLS Server listening on ", endpoint);
while (true) {
try {
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) {
}
}
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
默认构造函数
void open(const ip_address &endpoint, int backlog=SOMAXCONN)
打开并开始监听
void println(Args &&... args)
打印多个值并换行
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.hpp 第 82 行定义.