1. epoll_create
NAME
epoll_create open an epoll file descriptor
SYNOPSIS
#include <sys/epoll.h>
int epoll_create(int size);
DESCRIPTION
epoll_create() creates an epoll "instance", requesting the kernel to allocate an event backing store dimen‐
sioned for size descriptors. The size is not the maximum size of the backing store but just a hint to the
kernel about how to dimension internal structures. (Nowadays, size is ignored; see NOTES below.)
epoll_create() returns a file descriptor referring to the new epoll instance. This file descriptor is used
for all the subsequent calls to the epoll interface. When no longer required, the file descriptor returned by
epoll_create() should be closed by using close(2). When all file descriptors referring to an epoll instance
have been closed, the kernel destroys the instance and releases the associated resources for re-use.
RETURN VALUE
On success, these system calls return a non-negative file descriptor. On error, -1 is returned, and errno is
set to indicate the error.
2. poll_ctl
NAME
epoll_ctl - control interface for an epoll descriptor
SYNOPSIS
#include <sys/epoll.h>
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
DESCRIPTION
This system call performs control operations on the epoll instance referred to by the file descriptor epfd.
It requests that the operation op be performed for the target file descriptor, fd.
Valid values for the op argument are :
EPOLL_CTL_ADD
Register the target file descriptor fd on the epoll instance referred to by the file descriptor epfd
and associate the event event with the internal file linked to fd.
EPOLL_CTL_MOD
Change the event event associated with the target file descriptor fd.
EPOLL_CTL_DEL
Remove (deregister) the target file descriptor fd from the epoll instance referred to by epfd. The
event is ignored and can be NULL (but see BUGS below).
The event argument describes the object linked to the file descriptor fd. The struct epoll_event is defined
as :
typedef union epoll_data {
void *ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
} epoll_data_t;
struct epoll_event {
__uint32_t events; /* Epoll events */
epoll_data_t data; /* User data variable */
};
The events member is a bit set composed using the following available event types:
EPOLLIN
The associated file is available for read(2) operations.
EPOLLOUT
The associated file is available for write(2) operations.
EPOLLRDHUP (since Linux 2.6.17)
Stream socket peer closed connection, or shut down writing half of connection. (This flag is espe‐
cially useful for writing simple code to detect peer shutdown when using Edge Triggered monitoring.)
EPOLLPRI
There is urgent data available for read(2) operations.
EPOLLERR
Error condition happened on the associated file descriptor. epoll_wait(2) will always wait for this
event; it is not necessary to set it in events.
EPOLLHUP
Hang up happened on the associated file descriptor. epoll_wait(2) will always wait for this event; it
is not necessary to set it in events.
EPOLLET
Sets the Edge Triggered behavior for the associated file descriptor. The default behavior for epoll is
Level Triggered. See epoll(7) for more detailed information about Edge and Level Triggered event dis‐
tribution architectures.
EPOLLONESHOT (since Linux 2.6.2)
Sets the one-shot behavior for the associated file descriptor. This means that after an event is
pulled out with epoll_wait(2) the associated file descriptor is internally disabled and no other events
will be reported by the epoll interface. The user must call epoll_ctl() with EPOLL_CTL_MOD to re-arm
the file descriptor with a new event mask.
RETURN VALUE
When successful, epoll_ctl() returns zero. When an error occurs, epoll_ctl() returns -1 and errno is set
appropriately.
3. epoll_wait
NAME
epoll_wait - wait for an I/O event on an epoll file descriptor
SYNOPSIS
#include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
DESCRIPTION
The epoll_wait() system call waits for events on the epoll instance referred to by the file descriptor epfd.
The memory area pointed to by events will contain the events that will be available for the caller. Up to
maxevents are returned by epoll_wait(). The maxevents argument must be greater than zero.
The call waits for a maximum time of timeout milliseconds. Specifying a timeout of -1 makes epoll_wait() wait
indefinitely, while specifying a timeout equal to zero makes epoll_wait() to return immediately even if no
events are available (return code equal to zero).
The data of each returned structure will contain the same data the user set with an epoll_ctl(2)
(EPOLL_CTL_ADD,EPOLL_CTL_MOD) while the events member will contain the returned event bit field.
RETURN VALUE
When successful, epoll_wait() returns the number of file descriptors ready for the requested I/O, or zero if
no file descriptor became ready during the requested timeout milliseconds. When an error occurs, epoll_wait()
returns -1 and errno is set appropriately.