Iros
 
Loading...
Searching...
No Matches
async_net.h
Go to the documentation of this file.
1#pragma once
2
9
10namespace di::execution {
11namespace async_net_ns {
13 template<concepts::Scheduler Sched, typename... ExtraArgs>
14 requires(concepts::TagInvocable<AsyncMakeSocket, Sched, ExtraArgs...>)
15 constexpr auto operator()(Sched&& sched, ExtraArgs&&... extra_args) const {
16 static_assert(concepts::AsyncResource<
18 "async_make_socket() customizations must return a deferred di::AsyncResource instance.");
19 return tag_invoke(*this, di::forward<Sched>(sched), di::forward<ExtraArgs>(extra_args)...);
20 }
21 };
22
23 struct AsyncAccept {
24 template<typename Socket, typename... ExtraArgs>
25 requires(concepts::TagInvocable<AsyncAccept, Socket, ExtraArgs...>)
26 constexpr auto operator()(Socket&& socket, ExtraArgs&&... extra_args) const {
27 static_assert(
29 "async_accept() customizations must return a deferred di::AsyncResource instance.");
30 return tag_invoke(*this, di::forward<Socket>(socket), di::forward<ExtraArgs>(extra_args)...);
31 }
32 };
33
34 struct AsyncBind {
35 template<typename Socket, typename... ExtraArgs>
36 requires(concepts::TagInvocable<AsyncBind, Socket, ExtraArgs...>)
37 constexpr auto operator()(Socket&& socket, ExtraArgs&&... extra_args) const
38 -> concepts::SenderOf<SetValue()> auto {
39 static_assert(concepts::SenderOf<meta::TagInvokeResult<AsyncBind, Socket, ExtraArgs...>, SetValue()>,
40 "async_bind() customizations must return a sender of void.");
41 return tag_invoke(*this, di::forward<Socket>(socket), di::forward<ExtraArgs>(extra_args)...);
42 }
43 };
44
45 struct AsyncConnect {
46 template<typename Socket, typename... ExtraArgs>
47 requires(concepts::TagInvocable<AsyncConnect, Socket, ExtraArgs...>)
48 constexpr auto operator()(Socket&& socket, ExtraArgs&&... extra_args) const
49 -> concepts::SenderOf<SetValue()> auto {
50 static_assert(concepts::SenderOf<meta::TagInvokeResult<AsyncConnect, Socket, ExtraArgs...>, SetValue()>,
51 "async_connect() customizations must return a sender of void.");
52 return tag_invoke(*this, di::forward<Socket>(socket), di::forward<ExtraArgs>(extra_args)...);
53 }
54 };
55
56 struct AsyncListen {
57 template<typename Socket, typename... ExtraArgs>
58 requires(concepts::TagInvocable<AsyncListen, Socket, ExtraArgs...>)
59 constexpr auto operator()(Socket&& socket, ExtraArgs&&... extra_args) const
60 -> concepts::SenderOf<SetValue()> auto {
61 static_assert(concepts::SenderOf<meta::TagInvokeResult<AsyncListen, Socket, ExtraArgs...>, SetValue()>,
62 "async_listen() customizations must return a sender of void.");
63 return tag_invoke(*this, di::forward<Socket>(socket), di::forward<ExtraArgs>(extra_args)...);
64 }
65 };
66
68 template<typename Socket, typename... ExtraArgs>
69 requires(concepts::TagInvocable<AsyncShutdown, Socket, ExtraArgs...>)
70 constexpr auto operator()(Socket&& socket, ExtraArgs&&... extra_args) const
71 -> concepts::SenderOf<SetValue()> auto {
72 static_assert(concepts::SenderOf<meta::TagInvokeResult<AsyncShutdown, Socket, ExtraArgs...>, SetValue()>,
73 "async_shutdown() customizations must return a sender of void.");
74 return tag_invoke(*this, di::forward<Socket>(socket), di::forward<ExtraArgs>(extra_args)...);
75 }
76 };
77}
78
80constexpr inline auto async_accept = async_net_ns::AsyncAccept {};
81constexpr inline auto async_bind = async_net_ns::AsyncBind {};
82constexpr inline auto async_connect = async_net_ns::AsyncConnect {};
83constexpr inline auto async_listen = async_net_ns::AsyncListen {};
85}
Checks that a type model AsyncResource.
Definition run.h:50
Definition scheduler.h:21
Definition sender_of.h:26
Definition tag_invoke.h:33
Definition async_net.h:11
Definition bulk.h:30
constexpr auto async_connect
Definition async_net.h:82
constexpr auto async_shutdown
Definition async_net.h:84
constexpr auto async_bind
Definition async_net.h:81
constexpr auto async_accept
Definition async_net.h:80
constexpr auto async_make_socket
Definition async_net.h:79
constexpr auto async_listen
Definition async_net.h:83
decltype(di::function::tag_invoke(util::declval< Tag >(), util::declval< Args >()...)) TagInvokeResult
Definition tag_invoke.h:40
decltype(function::detail::invoke_impl(util::declval< Ts >()...)) InvokeResult
Definition invoke.h:64
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition set_value.h:6