1 /* Copyright (C) 2002-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #ifndef _SYS_EPOLL_H 19 #define _SYS_EPOLL_H 1 20 21 #include <stdint.h> 22 #include <sys/types.h> 23 24 #include <bits/types/sigset_t.h> 25 #include <bits/types/struct_timespec.h> 26 27 /* Get the platform-dependent flags. */ 28 #include <bits/epoll.h> 29 30 #ifndef __EPOLL_PACKED 31 # define __EPOLL_PACKED 32 #endif 33 34 35 enum EPOLL_EVENTS 36 { 37 EPOLLIN = 0x001, 38 #define EPOLLIN EPOLLIN 39 EPOLLPRI = 0x002, 40 #define EPOLLPRI EPOLLPRI 41 EPOLLOUT = 0x004, 42 #define EPOLLOUT EPOLLOUT 43 EPOLLRDNORM = 0x040, 44 #define EPOLLRDNORM EPOLLRDNORM 45 EPOLLRDBAND = 0x080, 46 #define EPOLLRDBAND EPOLLRDBAND 47 EPOLLWRNORM = 0x100, 48 #define EPOLLWRNORM EPOLLWRNORM 49 EPOLLWRBAND = 0x200, 50 #define EPOLLWRBAND EPOLLWRBAND 51 EPOLLMSG = 0x400, 52 #define EPOLLMSG EPOLLMSG 53 EPOLLERR = 0x008, 54 #define EPOLLERR EPOLLERR 55 EPOLLHUP = 0x010, 56 #define EPOLLHUP EPOLLHUP 57 EPOLLRDHUP = 0x2000, 58 #define EPOLLRDHUP EPOLLRDHUP 59 EPOLLEXCLUSIVE = 1u << 28, 60 #define EPOLLEXCLUSIVE EPOLLEXCLUSIVE 61 EPOLLWAKEUP = 1u << 29, 62 #define EPOLLWAKEUP EPOLLWAKEUP 63 EPOLLONESHOT = 1u << 30, 64 #define EPOLLONESHOT EPOLLONESHOT 65 EPOLLET = 1u << 31 66 #define EPOLLET EPOLLET 67 }; 68 69 70 /* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ 71 #define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */ 72 #define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */ 73 #define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */ 74 75 76 typedef union epoll_data 77 { 78 void *ptr; 79 int fd; 80 uint32_t u32; 81 uint64_t u64; 82 } epoll_data_t; 83 84 struct epoll_event 85 { 86 uint32_t events; /* Epoll events */ 87 epoll_data_t data; /* User data variable */ 88 } __EPOLL_PACKED; 89 90 91 __BEGIN_DECLS 92 93 /* Creates an epoll instance. Returns an fd for the new instance. 94 The "size" parameter is a hint specifying the number of file 95 descriptors to be associated with the new instance. The fd 96 returned by epoll_create() should be closed with close(). */ 97 extern int epoll_create (int __size) __THROW; 98 99 /* Same as epoll_create but with an FLAGS parameter. The unused SIZE 100 parameter has been dropped. */ 101 extern int epoll_create1 (int __flags) __THROW; 102 103 104 /* Manipulate an epoll instance "epfd". Returns 0 in case of success, 105 -1 in case of error ( the "errno" variable will contain the 106 specific error code ) The "op" parameter is one of the EPOLL_CTL_* 107 constants defined above. The "fd" parameter is the target of the 108 operation. The "event" parameter describes which events the caller 109 is interested in and any associated user data. */ 110 extern int epoll_ctl (int __epfd, int __op, int __fd, 111 struct epoll_event *__event) __THROW; 112 113 114 /* Wait for events on an epoll instance "epfd". Returns the number of 115 triggered events returned in "events" buffer. Or -1 in case of 116 error with the "errno" variable set to the specific error code. The 117 "events" parameter is a buffer that will contain triggered 118 events. The "maxevents" is the maximum number of events to be 119 returned ( usually size of "events" ). The "timeout" parameter 120 specifies the maximum wait time in milliseconds (-1 == infinite). 121 122 This function is a cancellation point and therefore not marked with 123 __THROW. */ 124 extern int epoll_wait (int __epfd, struct epoll_event *__events, 125 int __maxevents, int __timeout) 126 __attr_access ((__write_only__, 2, 3)); 127 128 129 /* Same as epoll_wait, but the thread's signal mask is temporarily 130 and atomically replaced with the one provided as parameter. 131 132 This function is a cancellation point and therefore not marked with 133 __THROW. */ 134 extern int epoll_pwait (int __epfd, struct epoll_event *__events, 135 int __maxevents, int __timeout, 136 const __sigset_t *__ss) 137 __attr_access ((__write_only__, 2, 3)); 138 139 /* Same as epoll_pwait, but the timeout as a timespec. 140 141 This function is a cancellation point and therefore not marked with 142 __THROW. */ 143 #ifndef __USE_TIME_BITS64 144 extern int epoll_pwait2 (int __epfd, struct epoll_event *__events, 145 int __maxevents, const struct timespec *__timeout, 146 const __sigset_t *__ss) 147 __attr_access ((__write_only__, 2, 3)); 148 #else 149 # ifdef __REDIRECT 150 extern int __REDIRECT (epoll_pwait2, (int __epfd, struct epoll_event *__ev, 151 int __maxevs, 152 const struct timespec *__timeout, 153 const __sigset_t *__ss), 154 __epoll_pwait2_time64) 155 __attr_access ((__write_only__, 2, 3)); 156 # else 157 # define epoll_pwait2 __epoll_pwait2_time64 158 # endif 159 #endif 160 161 __END_DECLS 162 163 #endif /* sys/epoll.h */ 164