glibc (2.38)

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