linux_api/
epoll.rs

1use crate::{bindings, const_conversions};
2use num_enum::{IntoPrimitive, TryFromPrimitive};
3
4bitflags::bitflags! {
5    /// Epoll create flags, as used with `epoll_create1`.
6    #[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
7    pub struct EpollCreateFlags: i32 {
8        const EPOLL_CLOEXEC = const_conversions::i32_from_u32(bindings::LINUX_EPOLL_CLOEXEC);
9    }
10}
11
12/// Epoll control operation, as used with `epoll_ctl`.
13#[derive(Debug, Copy, Clone, Eq, PartialEq, IntoPrimitive, TryFromPrimitive)]
14#[repr(i32)]
15#[allow(non_camel_case_types)]
16pub enum EpollCtlOp {
17    EPOLL_CTL_ADD = const_conversions::i32_from_u32(bindings::LINUX_EPOLL_CTL_ADD),
18    EPOLL_CTL_MOD = const_conversions::i32_from_u32(bindings::LINUX_EPOLL_CTL_MOD),
19    EPOLL_CTL_DEL = const_conversions::i32_from_u32(bindings::LINUX_EPOLL_CTL_DEL),
20}
21
22bitflags::bitflags! {
23    /// Epoll event types and input flags, which are ORed together in the `events` member of
24    /// `struct epoll_event`. As explained in `epoll_ctl(2)`, some flags represent event
25    /// types and other flags specify various input wakeup options.
26    #[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
27    pub struct EpollEvents: u32 {
28        /// An epoll event type.
29        const EPOLLIN = bindings::LINUX_EPOLLIN;
30        /// An epoll event type.
31        const EPOLLPRI = bindings::LINUX_EPOLLPRI;
32        /// An epoll event type.
33        const EPOLLOUT = bindings::LINUX_EPOLLOUT;
34        /// An epoll event type.
35        const EPOLLERR = bindings::LINUX_EPOLLERR;
36        /// An epoll event type.
37        const EPOLLHUP = bindings::LINUX_EPOLLHUP;
38        /// An epoll event type.
39        const EPOLLNVAL = bindings::LINUX_EPOLLNVAL;
40        /// An epoll event type.
41        const EPOLLRDNORM = bindings::LINUX_EPOLLRDNORM;
42        /// An epoll event type.
43        const EPOLLRDBAND = bindings::LINUX_EPOLLRDBAND;
44        /// An epoll event type.
45        const EPOLLWRNORM = bindings::LINUX_EPOLLWRNORM;
46        /// An epoll event type.
47        const EPOLLWRBAND = bindings::LINUX_EPOLLWRBAND;
48        /// An epoll event type.
49        const EPOLLMSG = bindings::LINUX_EPOLLMSG;
50        /// An epoll event type.
51        const EPOLLRDHUP = bindings::LINUX_EPOLLRDHUP;
52        /// An epoll wakeup option.
53        const EPOLLEXCLUSIVE = bindings::LINUX_EPOLLEXCLUSIVE;
54        /// An epoll wakeup option.
55        const EPOLLWAKEUP = bindings::LINUX_EPOLLWAKEUP;
56        /// An epoll wakeup option.
57        const EPOLLONESHOT = bindings::LINUX_EPOLLONESHOT;
58        /// An epoll wakeup option.
59        const EPOLLET = bindings::LINUX_EPOLLET;
60    }
61}
62
63// The `epoll_event` struct is passed as an argument to `epoll_ctl` and `epoll_wait`.
64#[allow(non_camel_case_types)]
65pub type epoll_event = crate::bindings::linux_epoll_event;
66unsafe impl shadow_pod::Pod for epoll_event {}