]> git.ipfire.org Git - thirdparty/gcc.git/blob - libphobos/libdruntime/core/sys/linux/epoll.d
Add D front-end, libphobos library, and D2 testsuite.
[thirdparty/gcc.git] / libphobos / libdruntime / core / sys / linux / epoll.d
1 /**
2 * D header file to interface with the Linux epoll API (http://man7.org/linux/man-pages/man7/epoll.7.html).
3 * Available since Linux 2.6
4 *
5 * Copyright: Copyright Adil Baig 2012.
6 * License : $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7 * Authors : Adil Baig (github.com/adilbaig)
8 */
9 module core.sys.linux.epoll;
10
11 version (linux):
12
13 extern (C):
14 @system:
15 @nogc:
16 nothrow:
17
18 enum
19 {
20 EPOLL_CLOEXEC = 0x80000,
21 EPOLL_NONBLOCK = 0x800
22 }
23
24 enum
25 {
26 EPOLLIN = 0x001,
27 EPOLLPRI = 0x002,
28 EPOLLOUT = 0x004,
29 EPOLLRDNORM = 0x040,
30 EPOLLRDBAND = 0x080,
31 EPOLLWRNORM = 0x100,
32 EPOLLWRBAND = 0x200,
33 EPOLLMSG = 0x400,
34 EPOLLERR = 0x008,
35 EPOLLHUP = 0x010,
36 EPOLLRDHUP = 0x2000, // since Linux 2.6.17
37 EPOLLONESHOT = 1u << 30,
38 EPOLLET = 1u << 31
39 }
40
41 /* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */
42 enum
43 {
44 EPOLL_CTL_ADD = 1, // Add a file descriptor to the interface.
45 EPOLL_CTL_DEL = 2, // Remove a file descriptor from the interface.
46 EPOLL_CTL_MOD = 3, // Change file descriptor epoll_event structure.
47 }
48
49 version (X86)
50 {
51 align(1) struct epoll_event
52 {
53 align(1):
54 uint events;
55 epoll_data_t data;
56 }
57 }
58 else version (X86_64)
59 {
60 align(1) struct epoll_event
61 {
62 align(1):
63 uint events;
64 epoll_data_t data;
65 }
66 }
67 else version (ARM)
68 {
69 struct epoll_event
70 {
71 uint events;
72 epoll_data_t data;
73 }
74 }
75 else version (AArch64)
76 {
77 struct epoll_event
78 {
79 uint events;
80 epoll_data_t data;
81 }
82 }
83 else version (PPC)
84 {
85 struct epoll_event
86 {
87 uint events;
88 epoll_data_t data;
89 }
90 }
91 else version (PPC64)
92 {
93 struct epoll_event
94 {
95 uint events;
96 epoll_data_t data;
97 }
98 }
99 else version (MIPS32)
100 {
101 struct epoll_event
102 {
103 uint events;
104 epoll_data_t data;
105 }
106 }
107 else version (MIPS64)
108 {
109 struct epoll_event
110 {
111 uint events;
112 epoll_data_t data;
113 }
114 }
115 else version (SPARC64)
116 {
117 struct epoll_event
118 {
119 uint events;
120 epoll_data_t data;
121 }
122 }
123 else version (SystemZ)
124 {
125 struct epoll_event
126 {
127 uint events;
128 epoll_data_t data;
129 }
130 }
131 else
132 {
133 static assert(false, "Platform not supported");
134 }
135
136 union epoll_data_t
137 {
138 void *ptr;
139 int fd;
140 uint u32;
141 ulong u64;
142 }
143
144 int epoll_create (int size);
145 int epoll_create1 (int flags);
146 int epoll_ctl (int epfd, int op, int fd, epoll_event *event);
147 int epoll_wait (int epfd, epoll_event *events, int maxevents, int timeout);