1#ifndef NEFORCE_NETWORK_TCP_TCP_CLIENT_HPP__
2#define NEFORCE_NETWORK_TCP_TCP_CLIENT_HPP__
23NEFORCE_BEGIN_NAMESPACE__
436 string sni_hostname_;
437 bool verify_peer_ =
true;
438 bool ssl_initialized_ =
false;
471 NEFORCE_NODISCARD
bool get_verify_peer() const noexcept {
return verify_peer_; }
479 NEFORCE_NODISCARD
const string& sni_hostname() const noexcept {
return sni_hostname_; }
517 NEFORCE_NODISCARD
bool has_ssl_context() const noexcept {
return ssl_ctx_.has_value() && ssl_ctx_->is_valid(); }
542NEFORCE_END_NAMESPACE__
ssl_client()=default
默认构造函数
string peer_certificate_info() const
获取对等方证书信息
bool load_ca_path(const string &ca_path)
加载CA证书目录
void pre_disconnect() override
连接断开前的清理工作
string cipher_name() const
获取当前密码套件名称
string protocol_version() const
获取当前协议版本
ssl_client(ssl_context ctx)
构造函数(带SSL上下文)
bool post_connect() override
连接建立后的额外处理
unique_ptr< tcp_socket > create_socket() override
创建新的socket对象
void set_sni_hostname(string hostname)
设置SNI主机名
void set_ssl_context(ssl_context ctx)
设置SSL上下文
bool has_ssl_context() const noexcept
检查是否有SSL上下文
bool load_ca_file(const string &ca_file)
加载CA证书文件
ssl_socket & ssl_socket_ref()
获取SSL socket引用
const ssl_socket & ssl_socket_ref() const
获取SSL socket常量引用
bool is_ssl_initialized() const noexcept
检查SSL是否已初始化
void set_verify_peer(bool verify)
设置是否验证对等方证书
vector< char > receive_all(size_t max_size=0)
接收所有可用数据
int reconnect_attempts_
最大重连次数
const string & connected_host() const noexcept
获取当前连接的主机名
void handle_exception(const exception &e) const
处理异常
ssize_t send(string_view data)
发送字符串数据
connect_callback_t connect_callback_
连接成功回调
bool is_reconnecting() const noexcept
检查是否正在重连
virtual void pre_disconnect()
连接断开前的清理工作
bool try_connect_to_ip(const string &ip, ports port)
尝试连接到指定IP
const tcp_socket & socket() const
获取底层socket常量引用
const dns_client & get_dns_client() const noexcept
获取DNS客户端常量引用
void set_reconnect_delay(milliseconds delay)
设置重连延迟时间
bool is_connected() const noexcept
检查是否已连接
void set_prefer_ipv6(bool prefer) noexcept
设置是否优先使用IPv6
milliseconds reconnect_delay() const noexcept
获取重连延迟时间
milliseconds reconnect_delay_
重连延迟
tcp_client_base(dns_client::config cfg, bool use_tcp=false)
构造函数(带DNS客户端)
void set_connect_timeout(milliseconds timeout)
设置连接超时时间
milliseconds connect_timeout() const noexcept
获取连接超时时间
dns_client & get_dns_client() noexcept
获取DNS客户端
optional< string > receive_line(size_t max_length=8192)
接收一行数据(以\n结尾)
exception_handler_t exception_handler_
异常处理器
atomic< bool > is_reconnecting_
是否正在重连
void set_connect_callback(connect_callback_t callback)
设置连接成功回调
unique_ptr< dns_client > dns_
DNS解析客户端
virtual unique_ptr< tcp_socket > create_socket()=0
创建新的socket对象
milliseconds send_timeout() const noexcept
获取发送超时时间
milliseconds recv_timeout_
接收超时
atomic< int > current_reconnect_attempt_
当前重连次数
ssize_t receive(void *buffer, size_t length)
接收数据
ports connected_port_
已连接的端口
bool send_all(string_view data)
发送所有字符串数据
disconnect_callback_t disconnect_callback_
断开连接回调
string connected_host_
已连接的主机名
bool send_all(const void *data, size_t length)
发送所有数据(保证全部发送)
virtual ~tcp_client_base()
析构函数
ports connected_port() const noexcept
获取当前连接的端口
bool reconnect_if_needed()
需要时执行重连
void set_exception_handler(exception_handler_t handler)
设置异常处理器
tcp_socket & socket()
获取底层socket引用
void set_auto_reconnect(bool enable, int max_attempts=3)
设置自动重连
virtual bool post_connect()
连接建立后的额外处理
int reconnect_attempts() const noexcept
获取最大重连次数
void set_recv_timeout(milliseconds timeout)
设置接收超时时间
ssize_t send(const void *data, size_t length)
发送数据
bool prefer_ipv6() const noexcept
检查是否优先使用IPv6
void set_dns_server(dns_client::config cfg)
设置DNS服务器配置
bool auto_reconnect_
是否自动重连
function< void(const string &, ports)> connect_callback_t
连接回调类型
milliseconds recv_timeout() const noexcept
获取接收超时时间
void disconnect() noexcept
断开连接
void set_send_timeout(milliseconds timeout)
设置发送超时时间
function< void()> disconnect_callback_t
断开回调类型
bool prefer_ipv6_
是否优先IPv6
void set_disconnect_callback(disconnect_callback_t callback)
设置断开连接回调
unique_ptr< tcp_socket > socket_
TCP socket
function< void(const exception &)> exception_handler_t
异常处理器类型
int current_reconnect_attempt() const noexcept
获取当前重连尝试次数
bool receive_exact(memory_view< char > buffer)
接收指定大小的数据
milliseconds send_timeout_
发送超时
bool is_auto_reconnect() const noexcept
检查是否启用自动重连
milliseconds connect_timeout_
连接超时
virtual bool connect(const string &host, ports port)
连接到服务器
unique_ptr< tcp_socket > create_socket() override
创建新的socket对象
duration< int64_t, milli > milliseconds
毫秒持续时间
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
constexpr unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr