NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
udp_socket.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_UDP_SOCKET_HPP__
2#define NEFORCE_NETWORK_UDP_SOCKET_HPP__
3
11
18NEFORCE_BEGIN_NAMESPACE__
19
24
41class NEFORCE_API udp_socket final : public ip_socket {
42public:
46 udp_socket() = default;
47
48 udp_socket(udp_socket&&) = default;
49 udp_socket& operator=(udp_socket&&) = default;
50
58 void open(family f = family::INET4);
59
71 ssize_t send_to(memory_view<const char> data, const ip_address& endpoint, int flags = 0);
72
85
98
110 ssize_t receive(memory_view<char> buffer, int flags = 0);
111
122 function<void(error_code, size_t, ip_address)> handler);
123
132 function<void(error_code, size_t, ip_address)> handler);
133
145 function<void(error_code, size_t)> handler);
146
156 cancellation_slot& slot, function<void(error_code, size_t)> handler);
157
165 template <typename Token,
167 void async_receive_from(io_context& ctx, memory_view<char> buffer, Token&& token) {
168 async_receive_from(ctx, buffer, function<void(error_code, size_t, ip_address)>(forward<Token>(token)));
169 }
170
179 async_receive_from(ctx, buffer, function<void(error_code, size_t, ip_address)>(result.get_handler()));
180 return result.get();
181 }
182
189 async_receive_from(ctx, buffer,
190 function<void(error_code, size_t, ip_address)>([](error_code, size_t, ip_address) {}));
191 }
192
193#ifdef NEFORCE_STANDARD_20
202 async_receive_from(ctx, buffer, function<void(error_code, size_t, ip_address)>(result.get_handler()));
203 return result.get();
204 }
205#endif
206
215 template <typename Token, enable_if_t<!is_same_v<decay_t<Token>, function<void(error_code, size_t)>>, int> = 0>
216 void async_send_to(io_context& ctx, memory_view<const char> data, const ip_address& endpoint, Token&& token) {
217 async_send_to(ctx, data, endpoint, function<void(error_code, size_t)>(forward<Token>(token)));
218 }
219
228 use_future_t /*unused*/) {
229 async_result<use_future_t, void(error_code, size_t)> result(use_future);
230 async_send_to(ctx, data, endpoint, function<void(error_code, size_t)>(result.get_handler()));
231 return result.get();
232 }
233
241 detached_t /*unused*/) {
242 async_send_to(ctx, data, endpoint, function<void(error_code, size_t)>([](error_code, size_t) {}));
243 }
244
245#ifdef NEFORCE_STANDARD_20
254 use_awaitable_t /*unused*/) {
256 async_send_to(ctx, data, endpoint, function<void(error_code, size_t)>(result.get_handler()));
257 return result.get();
258 }
259#endif
260};
261 // UDP
263
264NEFORCE_END_NAMESPACE__
265#endif // NEFORCE_NETWORK_UDP_SOCKET_HPP__
异步操作取消槽
函数包装器主模板声明
统一异步操作核心
IP地址封装类
ip_socket()=default
默认构造函数
ip_address::family family
网络地址族类型
void async_receive_from(io_context &ctx, memory_view< char > buffer, function< void(error_code, size_t, ip_address)> handler)
异步接收数据报
auto async_send_to(io_context &ctx, memory_view< const char > data, const ip_address &endpoint, use_awaitable_t)
异步发送数据报—use_awaitable
void async_receive_from(io_context &ctx, memory_view< char > buffer, cancellation_slot &slot, function< void(error_code, size_t, ip_address)> handler)
异步接收数据报(带取消槽)
ssize_t send_to(memory_view< const char > data, const ip_address &endpoint, int flags=0)
向指定端点发送数据报
ssize_t send(memory_view< const char > data, int flags=0)
向已连接的端点发送数据
auto async_receive_from(io_context &ctx, memory_view< char > buffer, use_awaitable_t)
异步接收数据报—use_awaitable
auto async_receive_from(io_context &ctx, memory_view< char > buffer, use_future_t)
异步接收数据报—use_future
pair< ssize_t, ip_address > receive_from(memory_view< char > buffer, int flags=0)
接收数据报并获取发送方地址
ssize_t receive(memory_view< char > buffer, int flags=0)
从已连接的端点接收数据
void open(family f=family::INET4)
打开UDP socket
void async_send_to(io_context &ctx, memory_view< const char > data, const ip_address &endpoint, detached_t)
异步发送数据报—detached(即发即忘)
auto async_send_to(io_context &ctx, memory_view< const char > data, const ip_address &endpoint, use_future_t)
异步发送数据报—use_future
void async_receive_from(io_context &ctx, memory_view< char > buffer, detached_t)
异步接收数据报—detached(即发即忘)
void async_receive_from(io_context &ctx, memory_view< char > buffer, Token &&token)
异步接收数据报—任意可调用对象
void async_send_to(io_context &ctx, memory_view< const char > data, const ip_address &endpoint, Token &&token)
异步发送数据报—任意可调用对象
void async_send_to(io_context &ctx, memory_view< const char > data, const ip_address &endpoint, function< void(error_code, size_t)> handler)
异步发送数据报
udp_socket()=default
默认构造函数
void async_send_to(io_context &ctx, memory_view< const char > data, const ip_address &endpoint, cancellation_slot &slot, function< void(error_code, size_t)> handler)
异步发送数据报(带取消槽)
通用函数包装器
constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
constexpr use_awaitable_t use_awaitable
use_awaitable 常量
constexpr use_future_t use_future
use_future 常量
int64_t ssize_t
有符号大小类型
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名
统一异步操作核心
IP协议族Socket基类
内存视图容器
完成令牌 trait 主模板
fire-and-forget 完成令牌
存储两个值的元组对
协程 awaitable 完成令牌
返回 future<T> 的完成令牌
协程 awaitable 完成令牌