1#ifndef NEFORCE_NETWORK_TCP_TCP_CLIENT_HPP__
2#define NEFORCE_NETWORK_TCP_TCP_CLIENT_HPP__
23NEFORCE_BEGIN_NAMESPACE__
439 string sni_hostname_;
440 bool verify_peer_ =
true;
441 bool ssl_initialized_ =
false;
474 NEFORCE_NODISCARD
bool get_verify_peer() const noexcept {
return verify_peer_; }
482 NEFORCE_NODISCARD
const string& sni_hostname() const noexcept {
return sni_hostname_; }
520 NEFORCE_NODISCARD
bool has_ssl_context() const noexcept {
return ssl_ctx_.has_value() && ssl_ctx_->is_valid(); }
547NEFORCE_END_NAMESPACE__
ssl_client()=default
默认构造函数
bool load_ca_path(const string &ca_path)
加载CA证书目录
void pre_disconnect() override
连接断开前的清理工作
NEFORCE_NODISCARD string_view cipher_name() const
获取当前密码套件名称
NEFORCE_NODISCARD bool is_ssl_initialized() const noexcept
检查SSL是否已初始化
ssl_client(ssl_context ctx)
构造函数(带SSL上下文)
bool post_connect() override
连接建立后的额外处理
unique_ptr< tcp_socket > create_socket() override
创建新的socket对象
NEFORCE_NODISCARD string_view protocol_version() const
获取当前协议版本
void set_sni_hostname(string hostname)
设置SNI主机名
void set_ssl_context(ssl_context ctx)
设置SSL上下文
NEFORCE_NODISCARD const ssl_socket & ssl_socket_ref() const
获取SSL socket常量引用
bool load_ca_file(const string &ca_file)
加载CA证书文件
NEFORCE_NODISCARD bool has_ssl_context() const noexcept
检查是否有SSL上下文
NEFORCE_NODISCARD string_view peer_certificate_info() const
获取对等方证书信息
NEFORCE_NODISCARD ssl_socket & ssl_socket_ref()
获取SSL socket引用
void set_verify_peer(bool verify)
设置是否验证对等方证书
vector< char > receive_all(size_t max_size=0)
接收所有可用数据
int reconnect_attempts_
最大重连次数
ssize_t send(string_view data)
发送字符串数据
connect_callback_t connect_callback_
连接成功回调
virtual void pre_disconnect()
连接断开前的清理工作
bool try_connect_to_ip(const string &ip, ports port)
尝试连接到指定IP
void set_reconnect_delay(milliseconds delay)
设置重连延迟时间
void set_prefer_ipv6(bool prefer) noexcept
设置是否优先使用IPv6
milliseconds reconnect_delay_
重连延迟
NEFORCE_NODISCARD const tcp_socket & socket() const
获取底层socket常量引用
NEFORCE_NODISCARD bool is_connected() const noexcept
检查是否已连接
NEFORCE_NODISCARD bool is_reconnecting() const noexcept
检查是否正在重连
void set_connect_timeout(milliseconds timeout)
设置连接超时时间
NEFORCE_NODISCARD dns_client & get_dns_client() noexcept
获取DNS客户端
NEFORCE_NODISCARD milliseconds reconnect_delay() const noexcept
获取重连延迟时间
NEFORCE_NODISCARD ports connected_port() const noexcept
获取当前连接的端口
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)
设置连接成功回调
virtual unique_ptr< tcp_socket > create_socket()=0
创建新的socket对象
NEFORCE_NODISCARD int current_reconnect_attempt() const noexcept
获取当前重连尝试次数
NEFORCE_NODISCARD milliseconds send_timeout() const noexcept
获取发送超时时间
milliseconds recv_timeout_
接收超时
tcp_client_base()=default
默认构造函数
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()
析构函数
bool reconnect_if_needed()
需要时执行重连
NEFORCE_ALWAYS_INLINE void handle_exception(const exception &e) const
处理异常
void set_exception_handler(exception_handler_t handler)
设置异常处理器
void set_auto_reconnect(bool enable, int max_attempts=3)
设置自动重连
NEFORCE_NODISCARD int reconnect_attempts() const noexcept
获取最大重连次数
virtual bool post_connect()
连接建立后的额外处理
NEFORCE_NODISCARD bool is_auto_reconnect() const noexcept
检查是否启用自动重连
NEFORCE_NODISCARD const dns_client & get_dns_client() const noexcept
获取DNS客户端常量引用
NEFORCE_NODISCARD milliseconds recv_timeout() const noexcept
获取接收超时时间
NEFORCE_NODISCARD const string & connected_host() const noexcept
获取当前连接的主机名
NEFORCE_NODISCARD bool prefer_ipv6() const noexcept
检查是否优先使用IPv6
NEFORCE_NODISCARD tcp_socket & socket()
获取底层socket引用
void set_recv_timeout(milliseconds timeout)
设置接收超时时间
ssize_t send(const void *data, size_t length)
发送数据
void set_dns_server(dns_client::config cfg)
设置DNS服务器配置
NEFORCE_NODISCARD milliseconds connect_timeout() const noexcept
获取连接超时时间
bool auto_reconnect_
是否自动重连
function< void(const string &, ports)> connect_callback_t
连接回调类型
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
异常处理器类型
tcp_client_base(dns_client dns)
构造函数(带DNS客户端)
bool receive_exact(memory_view< char > buffer)
接收指定大小的数据
milliseconds send_timeout_
发送超时
milliseconds connect_timeout_
连接超时
virtual bool connect(const string &host, ports port)
连接到服务器
unique_ptr< tcp_socket > create_socket() override
创建新的socket对象
tcp_client_base()=default
默认构造函数
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
字符字符串视图
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
NEFORCE_CONSTEXPR20 unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr