DESCRIPTION

The
epoll_wait()
system call waits for events on the
epoll(7)
instance referred to by the file descriptor
epfd.
The memory area pointed to by
eventswill contain the events that will be available for the caller.
Up to
maxeventsare returned by
epoll_wait().
The
maxeventsargument must be greater than zero.

The
timeoutargument specifies the number of milliseconds that
epoll_wait()
will block.
Time is measured against the
CLOCK_MONOTONICclock.
The call will block until either:

*

a file descriptor delivers an event;

*

the call is interrupted by a signal handler; or

*

the timeout expires.

Note that the
timeoutinterval will be rounded up to the system clock granularity,
and kernel scheduling delays mean that the blocking interval
may overrun by a small amount.
Specifying a
timeoutof -1 causes
epoll_wait()
to block indefinitely, while specifying a
timeoutequal to zero cause
epoll_wait()
to return immediately, even if no events are available.

The
dataof each returned structure will contain the same data the user set with an
epoll_ctl(2)
(EPOLL_CTL_ADD, EPOLL_CTL_MOD)
while the
eventsmember will contain the returned event bit field.

epoll_pwait()

The relationship between
epoll_wait()
and
epoll_pwait()
is analogous to the relationship between
select(2)
and
pselect(2):
like
pselect(2),
epoll_pwait()
allows an application to safely wait until either a file descriptor
becomes ready or until a signal is caught.

The
sigmaskargument may be specified as NULL, in which case
epoll_pwait()
is equivalent to
epoll_wait().

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
timeoutmilliseconds.
When an error occurs,
epoll_wait()
returns -1 and
errnois set appropriately.

ERRORS

EBADF

epfdis not a valid file descriptor.

EFAULT

The memory area pointed to by
eventsis not accessible with write permissions.

EINTR

The call was interrupted by a signal handler before either (1) any of the
requested events occurred or (2) the
timeoutexpired; see
signal(7).

EINVAL

epfdis not an
epollfile descriptor, or
maxeventsis less than or equal to zero.

VERSIONS

epoll_wait()
was added to the kernel in version 2.6.
Library support is provided in glibc starting with version 2.3.2.

epoll_pwait()
was added to Linux in kernel 2.6.19.
Library support is provided in glibc starting with version 2.6.

CONFORMING TO

epoll_wait()
is Linux-specific.

NOTES

While one thread is blocked in a call to
epoll_pwait(),
it is possible for another thread to add a file descriptor to the waited-upon
epollinstance.
If the new file descriptor becomes ready,
it will cause the
epoll_wait()
call to unblock.

For a discussion of what may happen if a file descriptor in an
epollinstance being monitored by
epoll_wait()
is closed in another thread, see
select(2).

BUGS

In kernels before 2.6.37, a
timeoutvalue larger than approximately
LONG_MAX / HZmilliseconds is treated as -1 (i.e., infinity).
Thus, for example, on a system where the
sizeof(long)is 4 and the kernel
HZvalue is 1000,
this means that timeouts greater than 35.79 minutes are treated as infinity.

C library/kernel differences

The raw
epoll_pwait()
system call has a sixth argument,
size_t sigsetsize,
which specifies the size in bytes of the
sigmaskargument.
The glibc
epoll_pwait()
wrapper function specifies this argument as a fixed value
(equal to
sizeof(sigset_t)).