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