| /** |
| * D header file to interface with the Linux epoll API (http://man7.org/linux/man-pages/man7/epoll.7.html). |
| * Available since Linux 2.6 |
| * |
| * Copyright: Copyright Adil Baig 2012. |
| * License : $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) |
| * Authors : Adil Baig (github.com/adilbaig) |
| */ |
| module core.sys.linux.epoll; |
| |
| version (linux): |
| |
| extern (C): |
| @system: |
| @nogc: |
| nothrow: |
| |
| version (ARM) version = ARM_Any; |
| version (AArch64) version = ARM_Any; |
| version (HPPA) version = HPPA_Any; |
| version (MIPS32) version = MIPS_Any; |
| version (MIPS64) version = MIPS_Any; |
| version (PPC) version = PPC_Any; |
| version (PPC64) version = PPC_Any; |
| version (RISCV32) version = RISCV_Any; |
| version (RISCV64) version = RISCV_Any; |
| version (S390) version = IBMZ_Any; |
| version (SPARC) version = SPARC_Any; |
| version (SPARC64) version = SPARC_Any; |
| version (SystemZ) version = IBMZ_Any; |
| version (X86) version = X86_Any; |
| version (X86_64) version = X86_Any; |
| |
| enum |
| { |
| EPOLL_CLOEXEC = 0x80000, |
| EPOLL_NONBLOCK = 0x800 |
| } |
| |
| enum |
| { |
| EPOLLIN = 0x001, |
| EPOLLPRI = 0x002, |
| EPOLLOUT = 0x004, |
| EPOLLRDNORM = 0x040, |
| EPOLLRDBAND = 0x080, |
| EPOLLWRNORM = 0x100, |
| EPOLLWRBAND = 0x200, |
| EPOLLMSG = 0x400, |
| EPOLLERR = 0x008, |
| EPOLLHUP = 0x010, |
| EPOLLRDHUP = 0x2000, // since Linux 2.6.17 |
| EPOLLEXCLUSIVE = 1u << 28, // since Linux 4.5 |
| EPOLLONESHOT = 1u << 30, |
| EPOLLET = 1u << 31 |
| } |
| |
| /* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ |
| enum |
| { |
| EPOLL_CTL_ADD = 1, // Add a file descriptor to the interface. |
| EPOLL_CTL_DEL = 2, // Remove a file descriptor from the interface. |
| EPOLL_CTL_MOD = 3, // Change file descriptor epoll_event structure. |
| } |
| |
| version (X86_Any) |
| { |
| align(1) struct epoll_event |
| { |
| align(1): |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else version (ARM_Any) |
| { |
| struct epoll_event |
| { |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else version (PPC_Any) |
| { |
| struct epoll_event |
| { |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else version (HPPA_Any) |
| { |
| struct epoll_event |
| { |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else version (MIPS_Any) |
| { |
| struct epoll_event |
| { |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else version (RISCV_Any) |
| { |
| struct epoll_event |
| { |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else version (SPARC_Any) |
| { |
| struct epoll_event |
| { |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else version (IBMZ_Any) |
| { |
| struct epoll_event |
| { |
| uint events; |
| epoll_data_t data; |
| } |
| } |
| else |
| { |
| static assert(false, "Platform not supported"); |
| } |
| |
| union epoll_data_t |
| { |
| void *ptr; |
| int fd; |
| uint u32; |
| ulong u64; |
| } |
| |
| int epoll_create (int size); |
| int epoll_create1 (int flags); |
| int epoll_ctl (int epfd, int op, int fd, epoll_event *event); |
| int epoll_wait (int epfd, epoll_event *events, int maxevents, int timeout); |