32#ifdef DIUS_USE_RUNTIME
33#include <linux/socket.h>
36#include <sys/socket.h>
42struct IoUringContextImpl;
50template<di::concepts::Invocable<io_uring::SQE*> Fun>
98 template<
typename CPO>
117 template<
typename Rec>
118 struct OperationStateT {
126 , m_receiver(
di::move(receiver)) {}
133 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
134 sqe->opcode = IORING_OP_READ;
135 sqe->fd = m_file_descriptor;
136 sqe->off = m_offset.value_or((
u64) -1);
137 sqe->addr =
reinterpret_cast<u64>(m_buffer.data());
138 sqe->len = m_buffer.size();
157 int m_file_descriptor;
160 [[no_unique_address]] Rec m_receiver;
164 template<di::ReceiverOf<CompletionSignatures> Receiver>
167 template<di::ReceiverOf<CompletionSignatures> Receiver>
170 di::move(receiver) };
191 template<
typename Rec>
192 struct OperationStateT {
200 , m_receiver(
di::move(receiver)) {}
207 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
208 sqe->opcode = IORING_OP_WRITE;
209 sqe->fd = m_file_descriptor;
210 sqe->off = m_offset.value_or((
u64) -1);
211 sqe->addr =
reinterpret_cast<u64>(m_buffer.data());
212 sqe->len = m_buffer.size();
231 int m_file_descriptor;
234 [[no_unique_address]] Rec m_receiver;
238 template<di::ReceiverOf<CompletionSignatures> Receiver>
241 template<di::ReceiverOf<CompletionSignatures> Receiver>
244 di::move(receiver) };
262 template<
typename Rec>
263 struct OperationStateT {
273 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
274 sqe->opcode = IORING_OP_CLOSE;
275 sqe->fd = m_file_descriptor;
294 int m_file_descriptor;
295 [[no_unique_address]] Rec m_receiver;
299 template<di::ReceiverOf<CompletionSignatures> Receiver>
302 template<di::ReceiverOf<CompletionSignatures> Receiver>
323 template<
typename Rec>
324 struct OperationStateT {
328 if (
address.path().size() < 108 - 1) {
329 sockaddr_un addr = {};
347 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
348 sqe->opcode = IORING_OP_CONNECT;
349 sqe->fd = m_file_descriptor;
350 sqe->addr = (
u64) di::addressof(m_address.value());
351 sqe->off =
sizeof(m_address.value());
370 int m_file_descriptor { -1 };
372 [[no_unique_address]] Rec m_receiver;
376 template<di::ReceiverOf<CompletionSignatures> Receiver>
379 template<di::ReceiverOf<CompletionSignatures> Receiver>
382 di::move(receiver) };
401 template<
typename Rec>
402 struct OperationStateT {
406 if (
address.path().size() < 108 - 1) {
407 sockaddr_un addr = {};
426 di::addressof(m_address.value()),
sizeof(m_address.value()));
427 if (!result.has_value()) {
441 int m_file_descriptor { -1 };
443 [[no_unique_address]] Rec m_receiver;
447 template<di::ReceiverOf<CompletionSignatures> Receiver>
450 template<di::ReceiverOf<CompletionSignatures> Receiver>
453 di::move(receiver) };
472 template<
typename Rec>
473 struct OperationStateT {
479 , m_receiver(
di::move(receiver)) {}
487 if (!result.has_value()) {
501 int m_file_descriptor { -1 };
503 [[no_unique_address]] Rec m_receiver;
507 template<di::ReceiverOf<CompletionSignatures> Receiver>
510 template<di::ReceiverOf<CompletionSignatures> Receiver>
531 template<
typename Rec>
532 struct OperationStateT {
542 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
543 sqe->opcode = IORING_OP_SHUTDOWN;
544 sqe->fd = m_file_descriptor;
545 sqe->len = (
u32) m_how;
564 int m_file_descriptor { -1 };
566 [[no_unique_address]] Rec m_receiver;
570 template<di::ReceiverOf<CompletionSignatures> Receiver>
573 template<di::ReceiverOf<CompletionSignatures> Receiver>
592 template<
typename Rec>
593 struct OperationStateT {
612 [[no_unique_address]] Rec m_receiver;
616 template<di::Receiver Rec>
619 template<di::ReceiverOf<CompletionSignatures> Rec>
621 return OperationState<Rec> { self.
parent, di::move(receiver) };
639 auto fd() const ->
int {
return m_fd; }
645 return ReadSomeSender { self.m_parent, self.m_fd, buffer, offset };
664 auto base_fd() const ->
int {
return m_base_fd; }
667 int m_base_fd { -1 };
670template<
typename Base>
675 template<
typename... Args>
678 : Base(di::forward<Args>(args)...), m_parent(context) {}
682 auto fd() const ->
int {
return m_fd; }
697 return BindSender { self.m_parent, self.m_fd, di::move(address) };
701 return ConnectSender { self.m_parent, self.m_fd, di::move(address) };
731 template<
typename Rec>
732 struct OperationStateT {
735 : m_parent(
parent), m_file(
file), m_receiver(
di::move(receiver)) {}
741 auto open_mode_flags = [&] {
742 switch (m_file.get().mode()) {
759 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
760 sqe->opcode = IORING_OP_OPENAT;
762 sqe->addr =
reinterpret_cast<u64>(m_file.get().path().c_str());
763 sqe->len = m_file.get().create_mode();
764 sqe->open_flags = open_mode_flags;
773 m_file.get().set_fd(cqe->res);
785 [[no_unique_address]] Rec m_receiver;
789 template<di::ReceiverOf<CompletionSignatures> Receiver>
792 template<di::ReceiverOf<CompletionSignatures> Receiver>
794 return OperationState<Receiver> { self.
parent, self.
file, di::move(receiver) };
815 template<
typename Rec>
816 struct OperationStateT {
819 : m_parent(
parent), m_socket(
socket), m_receiver(
di::move(receiver)) {}
826 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
827 sqe->opcode = IORING_OP_SOCKET;
838 m_socket.get().set_fd(cqe->res);
850 [[no_unique_address]] Rec m_receiver;
854 template<di::ReceiverOf<CompletionSignatures> Receiver>
857 template<di::ReceiverOf<CompletionSignatures> Receiver>
859 return OperationState<Receiver> { self.
parent, self.
socket, di::move(receiver) };
880 template<
typename Rec>
881 struct OperationStateT {
884 : m_parent(
parent), m_socket(
socket), m_receiver(
di::move(receiver)) {}
891 enqueue_io_operation(m_parent,
this, [&](
auto* sqe) {
892 sqe->opcode = IORING_OP_ACCEPT;
893 sqe->fd = m_socket.get().base_fd();
902 m_socket.get().set_fd(cqe->res);
914 [[no_unique_address]] Rec m_receiver;
918 template<di::ReceiverOf<CompletionSignatures> Receiver>
921 template<di::ReceiverOf<CompletionSignatures> Receiver>
923 return OperationState<Receiver> { self.
parent, self.
socket, di::move(receiver) };
931template<
typename Object,
typename CreateSend>
943 template<
typename Rec>
944 struct OperationStateT {
961 explicit Rec2(Rec* receiver) : m_receiver(receiver) {}
963 auto base() const& -> Rec const& {
return *m_receiver; }
964 auto base() && -> Rec&& {
return di::move(*m_receiver); }
971 : m_parent(
parent), m_object(
object), m_receiver(
di::move(receiver)) {}
978 void finish_phase1() {
981 Rec2(di::addressof(m_receiver)));
991 return self.finish_phase1();
999 [[no_unique_address]] Rec m_receiver;
1004 template<
typename Receiver>
1010 return OperationState<Receiver> { self.
parent, self.
object, di::move(receiver) };
1032 return { self.parent };
1052template<di::concepts::Invocable<io_uring::SQE*> Fun>
1057 di::invoke(di::forward<Fun>(function), sqe.data());
1058 sqe->user_data =
reinterpret_cast<uintptr_t>(op);
#define ASSERT
Definition assert_bool.h:16
Definition forward_list_node.h:9
Definition function.h:365
Definition defer_construct.h:8
Definition reference_wrapper.h:14
Definition optional_forward_declaration.h:5
Definition span_forward_declaration.h:10
Definition variant_forward_declaration.h:6
AcceptSocket(int base_fd)
Definition io_uring_context.h:662
auto base_fd() const -> int
Definition io_uring_context.h:664
Definition io_uring_context.h:629
auto mode() const -> OpenMode
Definition io_uring_context.h:636
friend auto tag_invoke(di::Tag< di::execution::async_read_some >, AsyncFile &self, di::Span< di::Byte > buffer, di::Optional< u64 > offset)
Definition io_uring_context.h:643
friend auto tag_invoke(di::Tag< di::execution::async_write_some >, AsyncFile &self, di::Span< di::Byte const > buffer, di::Optional< u64 > offset)
Definition io_uring_context.h:648
auto path() const -> di::Path const &
Definition io_uring_context.h:635
auto create_mode() const -> u16
Definition io_uring_context.h:637
auto parent() const -> IoUringContext *
Definition io_uring_context.h:634
auto fd() const -> int
Definition io_uring_context.h:639
AsyncFile(IoUringContext *parent, di::Path path, OpenMode mode, u16 create_mode)
Definition io_uring_context.h:631
void set_fd(int fd)
Definition io_uring_context.h:640
Definition io_uring_context.h:673
void set_fd(int fd)
Definition io_uring_context.h:683
AsyncSocket(IoUringContext *context, Args &&... args)
Definition io_uring_context.h:677
friend auto tag_invoke(di::Tag< di::execution::async_accept >, AsyncSocket &self)
Definition io_uring_context.h:712
friend auto tag_invoke(di::Tag< di::execution::async_write_some >, AsyncSocket &self, di::Span< di::Byte const > buffer, di::Optional< u64 >)
Definition io_uring_context.h:691
friend auto tag_invoke(di::Tag< di::execution::async_connect >, AsyncSocket &self, net::UnixAddress address)
Definition io_uring_context.h:700
friend auto tag_invoke(di::Tag< di::execution::async_bind >, AsyncSocket &self, net::UnixAddress address)
Definition io_uring_context.h:696
friend auto tag_invoke(di::Tag< di::execution::async_read_some >, AsyncSocket &self, di::Span< di::Byte > buffer, di::Optional< u64 >)
Definition io_uring_context.h:686
friend auto tag_invoke(di::Tag< di::execution::async_listen >, AsyncSocket &self, int count)
Definition io_uring_context.h:704
auto fd() const -> int
Definition io_uring_context.h:682
friend auto tag_invoke(di::Tag< di::execution::async_shutdown >, AsyncSocket &self, net::Shutdown how)
Definition io_uring_context.h:708
auto parent() const -> IoUringContext *
Definition io_uring_context.h:680
auto get_next_sqe() -> di::Optional< SQE & >
Definition io_uring.cpp:21
static auto create() -> di::Result< IoUringHandle >
Definition io_uring.cpp:61
#define DI_IMMOVABLE_NO_UNIQUE_ADDRESS
Definition compiler.h:15
Definition operations.h:11
#define O_WRONLY
Definition fcntl.h:8
#define O_CREAT
Definition fcntl.h:10
#define O_RDONLY
Definition fcntl.h:7
#define O_EXCL
Definition fcntl.h:11
#define O_RDWR
Definition fcntl.h:9
#define O_TRUNC
Definition fcntl.h:12
#define TRY
Definition monad_try.h:23
PathImpl< TransparentString > Path
Definition path.h:10
meta::Type< OperationStateT< Send, Shape, Function, Rec > > OperationState
Definition bulk.h:102
constexpr auto set_error
Definition set_error.h:14
constexpr auto set_next
Set the next sender of a sequence.
Definition sequence_sender.h:77
constexpr auto start
Definition start.h:20
constexpr auto make_env
Create an environment with overrides for queries.
Definition make_env.h:147
meta::Type< receiver_interface_ns::ReceiverAdaptor< Self, Base > > ReceiverAdaptor
Definition receiver_adaptor.h:236
constexpr auto set_stopped
Definition set_stopped.h:14
constexpr auto get_sequence_cardinality
A query that returns the cardinality of a sequence.
Definition get_sequence_cardinality.h:45
constexpr auto with
Specify an override for an environment query.
Definition make_env.h:112
constexpr auto get_stop_token
Definition get_stop_token.h:25
constexpr auto connect
Definition connect.h:42
constexpr auto set_value
Definition set_value.h:14
std::byte Byte
Definition byte.h:63
__UINT64_TYPE__ u64
Definition integers.h:12
__UINT32_TYPE__ u32
Definition integers.h:11
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
__UINT16_TYPE__ u16
Definition integers.h:10
Expected< T, Error > Result
Definition result.h:8
StatusCode< Erased< long > > Error
Definition error.h:8
Definition zstring_parser.h:9
constexpr auto make_deferred
Creates a deferred function object.
Definition make_deferred.h:75
constexpr auto ref
Definition reference_wrapper.h:98
constexpr auto invoke
Definition invoke.h:100
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252
constexpr auto fill_n
Definition fill_n.h:21
constexpr auto count
Definition count.h:37
constexpr auto copy
Definition copy.h:30
void unreachable()
Definition unreachable.h:4
struct io_uring_cqe CQE
Definition io_uring.h:11
void enqueue_operation(IoUringContext *, OperationStateBase *)
Definition io_uring_context.h:1061
auto get_scheduler(IoUringContext *) -> IoUringScheduler
Definition io_uring_context.h:1065
auto tag_invoke(di::Tag< di::execution::run >, AsyncFile &self)
Definition io_uring_context.h:1019
Shutdown
Definition socket.h:4
PosixError
Definition error.h:7
auto system_call(Number number) -> di::Expected< R, di::BasicError >
Definition system_call.h:27
OpenMode
Definition sync_file.h:109
@ Readonly
Definition sync_file.h:109
@ WriteNew
Definition sync_file.h:109
@ AppendOnly
Definition sync_file.h:109
@ ReadWrite
Definition sync_file.h:109
@ WriteClobber
Definition sync_file.h:109
Defines the sequence sender concepts and related CPOs.
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:42
Definition get_completion_scheduler.h:10
Definition sequence_sender.h:86
Definition set_stopped.h:6
Definition completion_signuatures.h:7
Type(IoUringContext *parent, di::ReferenceWrapper< AsyncSocket > socket, Rec &&receiver)
Definition io_uring_context.h:883
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:898
void execute() override
Definition io_uring_context.h:886
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:908
Definition io_uring_context.h:867
linux::AsyncSocket< AcceptSocket > AsyncSocket
Definition io_uring_context.h:871
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, AcceptSender const &self)
Definition io_uring_context.h:926
di::ReferenceWrapper< AsyncSocket > socket
Definition io_uring_context.h:877
void is_sender
Definition io_uring_context.h:869
di::CompletionSignatures< di::SetValue(di::ReferenceWrapper< AsyncSocket >), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:873
IoUringContext * parent
Definition io_uring_context.h:876
friend auto tag_invoke(di::Tag< di::execution::connect >, AcceptSender self, Receiver receiver)
Definition io_uring_context.h:922
void execute() override
Definition io_uring_context.h:414
Type(IoUringContext *parent, int file_descriptor, net::UnixAddress address, Rec receiver)
Definition io_uring_context.h:404
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:436
Definition io_uring_context.h:390
int file_descriptor
Definition io_uring_context.h:397
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, BindSender const &self)
Definition io_uring_context.h:456
di::CompletionSignatures< di::SetValue(), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:394
void is_sender
Definition io_uring_context.h:392
friend auto tag_invoke(di::Tag< di::execution::connect >, BindSender self, Receiver receiver)
Definition io_uring_context.h:451
IoUringContext * parent
Definition io_uring_context.h:396
net::UnixAddress address
Definition io_uring_context.h:398
Type(IoUringContext *parent, int file_descriptor, Rec receiver)
Definition io_uring_context.h:265
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:280
void execute() override
Definition io_uring_context.h:268
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:289
Definition io_uring_context.h:252
void is_sender
Definition io_uring_context.h:254
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, CloseSender const &self)
Definition io_uring_context.h:307
int file_descriptor
Definition io_uring_context.h:259
friend auto tag_invoke(di::Tag< di::execution::connect >, CloseSender self, Receiver receiver)
Definition io_uring_context.h:303
di::CompletionSignatures< di::SetValue(), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:256
IoUringContext * parent
Definition io_uring_context.h:258
void execute() override
Definition io_uring_context.h:336
Type(IoUringContext *parent, int file_descriptor, net::UnixAddress address, Rec receiver)
Definition io_uring_context.h:326
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:356
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:365
Definition io_uring_context.h:312
di::CompletionSignatures< di::SetValue(), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:316
int file_descriptor
Definition io_uring_context.h:319
void is_sender
Definition io_uring_context.h:314
IoUringContext * parent
Definition io_uring_context.h:318
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, ConnectSender const &self)
Definition io_uring_context.h:385
friend auto tag_invoke(di::Tag< di::execution::connect >, ConnectSender self, Receiver receiver)
Definition io_uring_context.h:380
net::UnixAddress address
Definition io_uring_context.h:320
Definition io_uring_context.h:95
constexpr friend auto tag_invoke(di::execution::GetCompletionScheduler< CPO >, Env const &self)
Definition io_uring_context.h:99
IoUringContext * parent
Definition io_uring_context.h:96
Definition io_uring_context.h:63
void run()
Definition io_uring_context.cpp:6
di::Queue< OperationStateBase, di::IntrusiveForwardList< OperationStateBase > > m_queue
Definition io_uring_context.h:81
void finish()
Definition io_uring_context.h:74
di::Atomic< bool > m_done
Definition io_uring_context.h:82
static auto create() -> di::Result< IoUringContext >
Definition io_uring_context.h:1048
io_uring::IoUringHandle m_handle
Definition io_uring_context.h:80
IoUringContext(IoUringContext &&other)
Definition io_uring_context.h:67
auto get_scheduler() -> IoUringScheduler
Definition io_uring_context.h:1069
Definition io_uring_context.h:85
friend auto tag_invoke(di::Tag< di::execution::schedule >, IoUringScheduler const &self) -> ScheduleSender
Definition io_uring_context.h:1031
IoUringContext * parent
Definition io_uring_context.h:87
constexpr friend auto operator==(IoUringScheduler const &, IoUringScheduler const &) -> bool=default
void execute() override
Definition io_uring_context.h:481
Type(IoUringContext *parent, int file_descriptor, int count, Rec receiver)
Definition io_uring_context.h:475
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:496
Definition io_uring_context.h:461
void is_sender
Definition io_uring_context.h:463
IoUringContext * parent
Definition io_uring_context.h:467
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, ListenSender const &self)
Definition io_uring_context.h:515
int file_descriptor
Definition io_uring_context.h:468
int count
Definition io_uring_context.h:469
di::CompletionSignatures< di::SetValue(), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:465
friend auto tag_invoke(di::Tag< di::execution::connect >, ListenSender self, Receiver receiver)
Definition io_uring_context.h:511
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:834
void execute() override
Definition io_uring_context.h:821
Type(IoUringContext *parent, di::ReferenceWrapper< AsyncSocket > socket, Rec &&receiver)
Definition io_uring_context.h:818
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:844
Definition io_uring_context.h:802
di::ReferenceWrapper< AsyncSocket > socket
Definition io_uring_context.h:812
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, MakeSocketSender const &self)
Definition io_uring_context.h:862
friend auto tag_invoke(di::Tag< di::execution::connect >, MakeSocketSender self, Receiver receiver)
Definition io_uring_context.h:858
linux::AsyncSocket< di::Void > AsyncSocket
Definition io_uring_context.h:806
void is_sender
Definition io_uring_context.h:804
IoUringContext * parent
Definition io_uring_context.h:811
di::CompletionSignatures< di::SetValue(di::ReferenceWrapper< AsyncSocket >), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:808
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:769
Type(IoUringContext *parent, di::ReferenceWrapper< AsyncFile > file, Rec &&receiver)
Definition io_uring_context.h:734
void execute() override
Definition io_uring_context.h:737
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:779
Definition io_uring_context.h:720
friend auto tag_invoke(di::Tag< di::execution::connect >, OpenSender self, Receiver receiver)
Definition io_uring_context.h:793
di::CompletionSignatures< di::SetValue(di::ReferenceWrapper< AsyncFile >), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:724
di::ReferenceWrapper< AsyncFile > file
Definition io_uring_context.h:728
void is_sender
Definition io_uring_context.h:722
IoUringContext * parent
Definition io_uring_context.h:727
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, OpenSender const &self)
Definition io_uring_context.h:797
Definition io_uring_context.h:57
virtual void did_complete(io_uring::CQE const *)
Definition io_uring_context.h:60
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:143
void execute() override
Definition io_uring_context.h:128
Type(IoUringContext *parent, int file_descriptor, di::Span< di::Byte > buffer, di::Optional< u64 > offset, Rec receiver)
Definition io_uring_context.h:120
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:152
Definition io_uring_context.h:104
void is_sender
Definition io_uring_context.h:106
friend auto tag_invoke(di::Tag< di::execution::connect >, ReadSomeSender self, Receiver receiver)
Definition io_uring_context.h:168
int file_descriptor
Definition io_uring_context.h:112
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, ReadSomeSender const &self)
Definition io_uring_context.h:173
di::Span< di::Byte > buffer
Definition io_uring_context.h:113
IoUringContext * parent
Definition io_uring_context.h:111
di::Optional< u64 > offset
Definition io_uring_context.h:114
di::CompletionSignatures< di::SetValue(size_t), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:108
Definition io_uring_context.h:946
friend auto tag_invoke(di::Tag< di::execution::set_value >, Rec1 &&self)
Definition io_uring_context.h:951
void is_receiver
Definition io_uring_context.h:947
friend auto tag_invoke(di::Tag< di::execution::set_stopped >, Rec1 &&self)
Definition io_uring_context.h:952
di::Function< void()> complete
Definition io_uring_context.h:949
auto base() const &-> Rec const &
Definition io_uring_context.h:963
Rec2(Rec *receiver)
Definition io_uring_context.h:961
auto base() &&-> Rec &&
Definition io_uring_context.h:964
Type(IoUringContext *parent, di::ReferenceWrapper< Object > object, Rec &&receiver)
Definition io_uring_context.h:970
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:986
Definition io_uring_context.h:932
di::SequenceTag is_sender
Definition io_uring_context.h:934
di::CompletionSignatures< di::SetValue(di::ReferenceWrapper< Object >), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:936
friend auto tag_invoke(di::Tag< di::execution::subscribe >, RunSender self, Receiver receiver)
Definition io_uring_context.h:1009
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, RunSender const &self)
Definition io_uring_context.h:1013
IoUringContext * parent
Definition io_uring_context.h:939
di::ReferenceWrapper< Object > object
Definition io_uring_context.h:940
void execute() override
Definition io_uring_context.h:598
Type(IoUringContext *parent, Rec &&receiver)
Definition io_uring_context.h:596
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:607
Definition io_uring_context.h:583
friend auto tag_invoke(di::Tag< di::execution::connect >, ScheduleSender self, Rec receiver)
Definition io_uring_context.h:620
IoUringContext * parent
Definition io_uring_context.h:589
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, ScheduleSender const &self)
Definition io_uring_context.h:624
void is_sender
Definition io_uring_context.h:585
di::CompletionSignatures< di::SetValue(), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:587
void execute() override
Definition io_uring_context.h:537
Type(IoUringContext *parent, int file_descriptor, net::Shutdown how, Rec receiver)
Definition io_uring_context.h:534
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:550
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:559
Definition io_uring_context.h:520
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, ShutdownSender const &self)
Definition io_uring_context.h:578
int file_descriptor
Definition io_uring_context.h:527
IoUringContext * parent
Definition io_uring_context.h:526
void is_sender
Definition io_uring_context.h:522
di::CompletionSignatures< di::SetValue(), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:524
friend auto tag_invoke(di::Tag< di::execution::connect >, ShutdownSender self, Receiver receiver)
Definition io_uring_context.h:574
net::Shutdown how
Definition io_uring_context.h:528
void did_complete(io_uring::CQE const *cqe) override
Definition io_uring_context.h:217
void execute() override
Definition io_uring_context.h:202
Type(IoUringContext *parent, int file_descriptor, di::Span< di::Byte const > buffer, di::Optional< u64 > offset, Rec receiver)
Definition io_uring_context.h:194
friend void tag_invoke(di::Tag< di::execution::start >, Type &self)
Definition io_uring_context.h:226
Definition io_uring_context.h:178
di::Span< di::Byte const > buffer
Definition io_uring_context.h:187
di::Optional< u64 > offset
Definition io_uring_context.h:188
int file_descriptor
Definition io_uring_context.h:186
void is_sender
Definition io_uring_context.h:180
friend auto tag_invoke(di::Tag< di::execution::connect >, WriteSomeSender self, Receiver receiver)
Definition io_uring_context.h:242
constexpr friend auto tag_invoke(di::Tag< di::execution::get_env >, WriteSomeSender const &self)
Definition io_uring_context.h:247
IoUringContext * parent
Definition io_uring_context.h:185
di::CompletionSignatures< di::SetValue(size_t), di::SetError(di::Error), di::SetStopped()> CompletionSignatures
Definition io_uring_context.h:182