MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
tcp_client.hpp
1#ifndef MSTL_NETWORK_TCP_TCP_CLIENT_HPP__
2#define MSTL_NETWORK_TCP_TCP_CLIENT_HPP__
3#include "./dns/dns_client.hpp"
5#include "ssl_socket.hpp"
7
8class MSTL_API tcp_client {
9private:
10#ifdef MSTL_SUPPORT_OPENSSL__
11 using handle_sock_t = ssl_socket;
12#else
13 using handle_sock_t = tcp_socket;
14#endif
15
16 dns_client dns_{};
17#ifdef MSTL_SUPPORT_OPENSSL__
18 ssl_context ssl_ctx_{};
19#endif
20 handle_sock_t socket_{};
21
22 string connected_host_;
23 uint16_t connected_port_ = 0;
24
25 milliseconds receive_timeout_{5000};
26 milliseconds send_timeout_{5000};
27
28 bool try_connect(const string& host, uint16_t port, const string& ip, bool ipv6);
29
30public:
31 explicit tcp_client() = default;
32 explicit tcp_client(dns_client dns);
33#ifdef MSTL_SUPPORT_OPENSSL__
34 explicit tcp_client(ssl_context ctx);
35#endif
36 ~tcp_client();
37
38 void set_recv_timeout(const milliseconds& timeout) { receive_timeout_ = timeout; }
39 void set_send_timeout(const milliseconds& timeout) { send_timeout_ = timeout; }
40#ifdef MSTL_SUPPORT_OPENSSL__
41 void set_ssl_context(ssl_context ctx) { ssl_ctx_ = _MSTL move(ctx); }
42#endif
43
44 MSTL_NODISCARD milliseconds recv_timeout() const { return receive_timeout_; }
45 MSTL_NODISCARD milliseconds send_timeout() const { return send_timeout_; }
46
47 bool connect(const string& host, uint16_t port);
48 void close() noexcept;
49
50 MSTL_NODISCARD bool is_connected() const noexcept { return socket_.is_valid(); }
51 MSTL_NODISCARD const string& connected_host() const noexcept { return connected_host_; }
52 MSTL_NODISCARD uint16_t connected_port() const noexcept { return connected_port_; }
53
54 ssize_t send(const void* data, size_t length);
55 ssize_t send(string_view data);
56 ssize_t receive(void* buffer, size_t length) const;
57
58 bool receive_all(string& out_data, size_t expected_length = 0);
59 void receive_with_callback(function<void(const string&)> callback, size_t buffer_size = 8192);
60
61 MSTL_NODISCARD const handle_sock_t& socket() const noexcept { return socket_; }
62 MSTL_NODISCARD handle_sock_t& socket() noexcept { return socket_; }
63};
64
66#endif // MSTL_NETWORK_TCP_TCP_CLIENT_HPP__
MSTL通用函数包装器
unsigned short uint16_t
16位无符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
int64_t ssize_t
有符号大小类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针