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