1 EPOLL_CTL(3C)            Standard C Library Functions            EPOLL_CTL(3C)
   2 
   3 
   4 
   5 NAME
   6        epoll_ctl - control an epoll instance
   7 
   8 SYNOPSIS
   9        #include <sys/epoll.h>
  10 
  11        int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
  12 
  13 
  14 DESCRIPTION
  15        The epoll_ctl() function executes the operation specified by op (as
  16        parameterized by event) on the epfd epoll instance.  Valid values for
  17        op:
  18 
  19 
  20        EPOLL_CTL_ADD
  21                    For the epoll(5) instance specified by epfd, associate the
  22                    file descriptor specified by fd with the event specified by
  23                    event.
  24 
  25 
  26        EPOLL_CTL_DEL
  27                    For the epoll(5) instance specified by epfd, remove all
  28                    event associations for the file descriptor specified by fd.
  29                    event is ignored, and may be NULL.
  30 
  31 
  32        EPOLL_CTL_MOD
  33                    For the epoll(5) instance specified by epfd, modify the
  34                    event association for the file descriptor specified by fd
  35                    to be that specified by event.
  36 
  37 
  38        The event parameter has the following structure:
  39 
  40            typedef union epoll_data {
  41                 void    *ptr;
  42                 int      fd;
  43                 uint32_t u32;
  44                 uint64_t u64;
  45            } epoll_data_t;
  46 
  47            struct epoll_event {
  48                 uint32_t     events;
  49                 epoll_data_t data;
  50            };
  51 
  52        The data field specifies the datum to be associated with the event and
  53        will be returned via epoll_wait(3C).  The events field denotes both the
  54        desired events (when specified via epoll_ctl()) and the events that
  55        have occurred (when returned via epoll_wait(3C)).  In either case, the
  56        events field is a bitmask constructed by a logical OR operation of any
  57        combination of the following event flags:
  58 
  59 
  60        EPOLLIN
  61                      Data other than high priority data may be read without
  62                      blocking. For streams, this flag is set in the returned
  63                      events even if the message is of zero length.
  64 
  65 
  66        EPOLLPRI
  67                      Normal data (priority band equals 0) may be read without
  68                      blocking. For streams, this flag is set in the returned
  69                      events even if the message is of zero length.
  70 
  71 
  72        EPOLLOUT
  73                      Normal data (priority band equals 0) may be written
  74                      without blocking.
  75 
  76 
  77        EPOLLRDNORM
  78                      Normal data (priority band equals 0) may be read without
  79                      blocking. For streams, this flag is set in the returned
  80                      revents even if the message is of zero length.
  81 
  82 
  83        EPOLLRDBAND
  84                      Data from a non-zero priority band may be read without
  85                      blocking. For streams, this flag is set in the returned
  86                      revents even if the message is of zero length.
  87 
  88 
  89        EPOLLWRNORM
  90                      The same as EPOLLOUT.
  91 
  92 
  93        EPOLLWRBAND
  94                      Priority data (priority band > 0) may be written.       This
  95                      event only examines bands that have been written to at
  96                      least once.
  97 
  98 
  99        EPOLLMSG
 100                      This exists only for backwards binary and source
 101                      compatibility with Linux; it has no meaning and is
 102                      ignored.
 103 
 104 
 105        EPOLLERR
 106                      An error has occurred on the device or stream.  This flag
 107                      is only valid in the returned events field.
 108 
 109 
 110        EPOLLHUP
 111                      A hangup has occurred on the stream. This event and
 112                      EPOLLOUT are mutually exclusive; a stream can never be
 113                      writable if a hangup has occurred. However, this event
 114                      and  EPOLLIN, EPOLLRDNORM, EPOLLRDBAND, EPOLLRDHUP or
 115                      EPOLLPRI are not mutually exclusive. This flag is only
 116                      valid in the events field returned from epoll_wait(3C);
 117                      it is not used in the events field specified via
 118                      epoll_ctl().
 119 
 120 
 121        EPOLLRDHUP
 122                      The stream socket peer shutdown the writing half of the
 123                      connection and no further data will be readable via the
 124                      socket.  This event is not mutually exclusive with
 125                      EPOLLIN.
 126 
 127 
 128        EPOLLWAKEUP
 129                      This exists only for backwards binary and source
 130                      compatibility with Linux; it has no meaning and is
 131                      ignored.
 132 
 133 
 134        EPOLLONESHOT
 135                      Sets the specified event to be in one-shot mode, whereby
 136                      the event association with the epoll(5) instance
 137                      specified by epfd is removed atomically as the event is
 138                      returned via epoll_wait(3C).  Use of this mode allows for
 139                      resolution of some of the races inherent in multithreaded
 140                      use of epoll_wait(3C).
 141 
 142 
 143        EPOLLET
 144                      Sets the specified event to be edge-triggered mode
 145                      instead of the default mode of level-triggered.  In this
 146                      mode, events will be induced by transitions on an event
 147                      source rather than the state of the event source.  While
 148                      perhaps superficially appealing, this mode introduces
 149                      several new potential failure modes for user-level
 150                      software and should be used with caution.
 151 
 152 
 153 RETURN VALUES
 154        Upon successful completion, epoll_ctl() returns 0.  If an error occurs,
 155        -1 is returned and errno is set to indicate the error.
 156 
 157 
 158 ERRORS
 159        epoll_ctl() will fail if:
 160 
 161        EBADF
 162                  epfd is not a valid file descriptor.
 163 
 164 
 165        EFAULT
 166                  The memory associated with event was not mapped.
 167 
 168 
 169        EEXIST
 170                  The operation specified was EPOLL_CTL_ADD and the specified
 171                  file descriptor is already associated with an event for the
 172                  specified epoll(5) instance.
 173 
 174 
 175        ENOENT
 176                  The operation specified was EPOLL_CTL_MOD or EPOLL_CTL_DEL
 177                  and the specified file descriptor is not associated with an
 178                  event for the specified epoll(5) instance.
 179 
 180 
 181 
 182 NOTES
 183        The epoll(5) facility is implemented for purposes of offering
 184        compatibility for Linux-borne applications; native applications should
 185        continue to prefer using event ports via the port_create(3C),
 186        port_associate(3C) and port_get(3C) interfaces.  See epoll(5) for
 187        compatibility details and restrictions.
 188 
 189 
 190 SEE ALSO
 191        epoll_create(3C), epoll_wait(3C), port_create(3C), port_associate(3C),
 192        port_get(3C), epoll(5)
 193 
 194 
 195 
 196                                  April 9, 2016                   EPOLL_CTL(3C)