Skip to main content

dope_core/io/
mod.rs

1use crate::io::fd::handles;
2pub mod datagram;
3pub mod event;
4pub mod fd;
5pub mod fs;
6pub(crate) mod outputs;
7pub mod recv;
8pub mod socket;
9pub mod transfer;
10
11use event::{batch, net::accept};
12
13use crate::{
14    Errno,
15    driver::{
16        result::{
17            poll,
18            poll::fault::{Echo, Fault},
19        },
20        retained::flight::cancel,
21        route,
22    },
23};
24
25/// A completion emitted by the driver.
26///
27/// [`Event::into_kind`] consumes its exact payload and operation authority.
28/// Safe code cannot mint completion authority.
29///
30///
31///
32#[repr(transparent)]
33pub struct Event<'d>(event::Kind<'d>);
34
35impl<'d> Event<'d> {
36    pub fn into_kind(self) -> event::Kind<'d> {
37        self.0
38    }
39
40    pub fn route(&self) -> route::Route {
41        match &self.0 {
42            event::Kind::Accept(done) => done.token().route(),
43            event::Kind::Recv(done) | event::Kind::RetiredRecv(done) => done.token().route(),
44            event::Kind::Send(done) => done.token().route(),
45            event::Kind::Socket(done) => done.token().route(),
46            event::Kind::Tuning(done) => done.token().route(),
47            event::Kind::Connect(done) => done.token().route(),
48            event::Kind::Open(done) => done.token().route(),
49            event::Kind::Write(done) => done.token().route(),
50            event::Kind::Read(done) => done.token().route(),
51            event::Kind::Sync(done) => done.token().route(),
52            event::Kind::Shutdown => route::Route::FRAMEWORK,
53        }
54    }
55}
56
57impl<'d> From<event::Kind<'d>> for Event<'d> {
58    fn from(kind: event::Kind<'d>) -> Self {
59        Self(kind)
60    }
61}
62
63const _: () =
64    assert!(std::mem::size_of::<Event<'static>>() == std::mem::size_of::<event::Kind<'static>>());
65
66/// Cancellation failures retain their operation owners for retry.
67/// Completion reports include buffer return and descriptor retirement outcomes.
68/// Exhausted accepted slots remain quarantined in the native table until reactor teardown.
69#[derive(Debug)]
70pub enum Reclaimed {
71    /// A consumed native completion that violated its operation contract.
72    Fault(Fault),
73    /// A native retirement syscall failed while its exact owner remains retained.
74    Reactor(poll::Cause),
75    /// A cancellation was rejected while its operation owner remains retained.
76    Cancellation(cancel::Failure),
77    Close {
78        slot: handles::PhysicalSlot,
79        file: poll::Close,
80        reactor: Result<(), poll::Cause>,
81    },
82    Accept {
83        echo: Echo,
84        result: Result<handles::Reclaimed, accept::Failure>,
85        flow: batch::Flow,
86    },
87    AcceptRoute {
88        target: route::Token,
89        cause: accept::Failure,
90        flow: batch::Flow,
91    },
92    Recv {
93        echo: Echo,
94        result: Result<usize, Errno>,
95        flow: batch::Flow,
96    },
97    RecvRoute {
98        target: route::Token,
99        result: Result<transfer::Len, Errno>,
100        flow: batch::Flow,
101    },
102    Send {
103        echo: Echo,
104        result: Result<transfer::Len, Errno>,
105    },
106    Connect {
107        echo: Echo,
108        result: Result<(), event::net::connect::Error>,
109    },
110    Socket {
111        echo: Echo,
112        slot: handles::PhysicalSlot,
113        result: Result<(), socket::Create>,
114        close: Option<Result<(), Errno>>,
115    },
116    Open {
117        echo: Echo,
118        result: Result<(), Errno>,
119        close: Option<Result<(), Errno>>,
120    },
121    Write {
122        echo: Echo,
123        result: Result<transfer::Len, Errno>,
124    },
125    Read {
126        echo: Echo,
127        result: Result<transfer::Len, Errno>,
128    },
129    Sync {
130        echo: Echo,
131        result: Result<(), Errno>,
132    },
133    Tuning {
134        echo: Echo,
135        result: Result<(), Errno>,
136    },
137    Shutdown,
138}