Home | History | Annotate | Download | only in include
      1 /* Copyright (C) 2002 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 
     26 enum EPOLL_EVENTS
     27   {
     28     EPOLLIN = 0x001,
     29 #define EPOLLIN EPOLLIN
     30     EPOLLPRI = 0x002,
     31 #define EPOLLPRI EPOLLPRI
     32     EPOLLOUT = 0x004,
     33 #define EPOLLOUT EPOLLOUT
     34     EPOLLRDNORM = 0x040,
     35 #define EPOLLRDNORM EPOLLRDNORM
     36     EPOLLRDBAND = 0x080,
     37 #define EPOLLRDBAND EPOLLRDBAND
     38     EPOLLWRNORM = 0x100,
     39 #define EPOLLWRNORM EPOLLWRNORM
     40     EPOLLWRBAND = 0x200,
     41 #define EPOLLWRBAND EPOLLWRBAND
     42     EPOLLMSG = 0x400,
     43 #define EPOLLMSG EPOLLMSG
     44     EPOLLERR = 0x008,
     45 #define EPOLLERR EPOLLERR
     46     EPOLLHUP = 0x010,
     47 #define EPOLLHUP EPOLLHUP
     48     EPOLLONESHOT = (1 << 30),
     49 #define EPOLLONESHOT EPOLLONESHOT
     50     EPOLLET = (1 << 31)
     51 #define EPOLLET EPOLLET
     52 
     53   };
     54 
     55 
     56 /* Valid opcodes ( "op" parameter ) to issue to epoll_ctl().  */
     57 #define EPOLL_CTL_ADD 1	/* Add a file decriptor to the interface.  */
     58 #define EPOLL_CTL_DEL 2	/* Remove a file decriptor from the interface.  */
     59 #define EPOLL_CTL_MOD 3	/* Change file decriptor epoll_event structure.  */
     60 
     61 
     62 /*
     63  * On x86-64 make the 64bit structure have the same alignment as the
     64  * 32bit structure. This makes 32bit emulation easier.
     65  */
     66 #ifdef __x86_64__
     67 #define EPOLL_PACKED __attribute__((packed))
     68 #else
     69 #define EPOLL_PACKED
     70 #endif
     71 
     72 
     73 typedef union epoll_data
     74 {
     75   void *ptr;
     76   int fd;
     77   uint32_t u32;
     78   uint64_t u64;
     79 } epoll_data_t;
     80 
     81 struct epoll_event
     82 {
     83   uint32_t events;	/* Epoll events */
     84   epoll_data_t data;	/* User data variable */
     85 } EPOLL_PACKED;
     86 
     87 
     88 #ifdef __cplusplus
     89 extern "C" {
     90 #endif
     91 
     92 /* Creates an epoll instance.  Returns an fd for the new instance.
     93    The "size" parameter is a hint specifying the number of file
     94    descriptors to be associated with the new instance.  The fd
     95    returned by epoll_create() should be closed with close().  */
     96 extern int epoll_create (int __size) __THROW;
     97 
     98 
     99 /* Manipulate an epoll instance "epfd". Returns 0 in case of success,
    100    -1 in case of error ( the "errno" variable will contain the
    101    specific error code ) The "op" parameter is one of the EPOLL_CTL_*
    102    constants defined above. The "fd" parameter is the target of the
    103    operation. The "event" parameter describes which events the caller
    104    is interested in and any associated user data.  */
    105 extern int epoll_ctl (int __epfd, int __op, int __fd,
    106 		      struct epoll_event *__event) __THROW;
    107 
    108 
    109 /* Wait for events on an epoll instance "epfd". Returns the number of
    110    triggered events returned in "events" buffer. Or -1 in case of
    111    error with the "errno" variable set to the specific error code. The
    112    "events" parameter is a buffer that will contain triggered
    113    events. The "maxevents" is the maximum number of events to be
    114    returned ( usually size of "events" ). The "timeout" parameter
    115    specifies the maximum wait time in milliseconds (-1 == infinite).  */
    116 extern int epoll_wait (int __epfd, struct epoll_event *__events,
    117 		       int __maxevents, int __timeout) __THROW;
    118 
    119 #ifdef __cplusplus
    120 }
    121 #endif
    122 
    123 #endif /* sys/epoll.h */
    124