1 /* Copyright (C) 2002-2012 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 <http://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 /* Get __sigset_t. */ 25 #include <bits/sigset.h> 26 27 #ifndef __sigset_t_defined 28 # define __sigset_t_defined 29 typedef __sigset_t sigset_t; 30 #endif 31 32 /* Get the platform-dependent flags. */ 33 #include <bits/epoll.h> 34 35 #ifndef __EPOLL_PACKED 36 # define __EPOLL_PACKED 37 #endif 38 39 40 enum EPOLL_EVENTS 41 { 42 EPOLLIN = 0x001, 43 #define EPOLLIN EPOLLIN 44 EPOLLPRI = 0x002, 45 #define EPOLLPRI EPOLLPRI 46 EPOLLOUT = 0x004, 47 #define EPOLLOUT EPOLLOUT 48 EPOLLRDNORM = 0x040, 49 #define EPOLLRDNORM EPOLLRDNORM 50 EPOLLRDBAND = 0x080, 51 #define EPOLLRDBAND EPOLLRDBAND 52 EPOLLWRNORM = 0x100, 53 #define EPOLLWRNORM EPOLLWRNORM 54 EPOLLWRBAND = 0x200, 55 #define EPOLLWRBAND EPOLLWRBAND 56 EPOLLMSG = 0x400, 57 #define EPOLLMSG EPOLLMSG 58 EPOLLERR = 0x008, 59 #define EPOLLERR EPOLLERR 60 EPOLLHUP = 0x010, 61 #define EPOLLHUP EPOLLHUP 62 EPOLLNVAL = 0x020, 63 #define EPOLLNVAL EPOLLNVAL 64 EPOLLRDHUP = 0x2000, 65 #define EPOLLRDHUP EPOLLRDHUP 66 EPOLL_URING_WAKE = 1u << 27, 67 #define EPOLL_URING_WAKE EPOLL_URING_WAKE 68 EPOLLEXCLUSIVE = 1u << 28, 69 #define EPOLLEXCLUSIVE EPOLLEXCLUSIVE 70 EPOLLWAKEUP = 1u << 29, 71 #define EPOLLWAKEUP EPOLLWAKEUP 72 EPOLLONESHOT = 1u << 30, 73 #define EPOLLONESHOT EPOLLONESHOT 74 EPOLLET = 1u << 31 75 #define EPOLLET EPOLLET 76 }; 77 78 79 /* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ 80 #define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */ 81 #define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */ 82 #define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */ 83 84 85 typedef union epoll_data 86 { 87 void *ptr; 88 int fd; 89 uint32_t u32; 90 uint64_t u64; 91 } epoll_data_t; 92 93 struct epoll_event 94 { 95 uint32_t events; /* Epoll events */ 96 epoll_data_t data; /* User data variable */ 97 } __EPOLL_PACKED; 98 99 100 __BEGIN_DECLS 101 102 /* Creates an epoll instance. Returns an fd for the new instance. 103 The "size" parameter is a hint specifying the number of file 104 descriptors to be associated with the new instance. The fd 105 returned by epoll_create() should be closed with close(). */ 106 extern int epoll_create (int __size) __THROW; 107 108 /* Same as epoll_create but with an FLAGS parameter. The unused SIZE 109 parameter has been dropped. */ 110 extern int epoll_create1 (int __flags) __THROW; 111 112 113 /* Manipulate an epoll instance "epfd". Returns 0 in case of success, 114 -1 in case of error ( the "errno" variable will contain the 115 specific error code ) The "op" parameter is one of the EPOLL_CTL_* 116 constants defined above. The "fd" parameter is the target of the 117 operation. The "event" parameter describes which events the caller 118 is interested in and any associated user data. */ 119 extern int epoll_ctl (int __epfd, int __op, int __fd, 120 struct epoll_event *__event) __THROW; 121 122 123 /* Wait for events on an epoll instance "epfd". Returns the number of 124 triggered events returned in "events" buffer. Or -1 in case of 125 error with the "errno" variable set to the specific error code. The 126 "events" parameter is a buffer that will contain triggered 127 events. The "maxevents" is the maximum number of events to be 128 returned ( usually size of "events" ). The "timeout" parameter 129 specifies the maximum wait time in milliseconds (-1 == infinite). 130 131 This function is a cancellation point and therefore not marked with 132 __THROW. */ 133 extern int epoll_wait (int __epfd, struct epoll_event *__events, 134 int __maxevents, int __timeout); 135 136 137 /* Same as epoll_wait, but the thread's signal mask is temporarily 138 and atomically replaced with the one provided as parameter. 139 140 This function is a cancellation point and therefore not marked with 141 __THROW. */ 142 extern int epoll_pwait (int __epfd, struct epoll_event *__events, 143 int __maxevents, int __timeout, 144 const __sigset_t *__ss); 145 146 __END_DECLS 147 148 #endif /* sys/epoll.h */ 149