Home | History | Annotate | Download | only in sys
      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