int
poll(
struct pollfd *fds
, nfds_t nfds
, int timeout
)
int
pollts(
struct pollfd * restrict fds
, nfds_t nfds
, const struct timespec * restrict ts
, const sigset_t * restrict sigmask
)
)
and
pollts(
)
examine a set of file descriptors to see if some of them are ready for
I/O.
The
fds
argument is a pointer to an array of pollfd structures as defined in
<
poll.h
>
(shown below).
The
nfds
argument determines the size of the
fds
array.
struct pollfd {
int fd; /* file descriptor */
short events; /* events to look for */
short revents; /* events returned */
};
The fields of
struct
pollfd
are as follows:
The event bitmasks in
events
and
revents
have the following bits:
events
bitmask.
events
bitmask.
Note that
POLLHUP
and
POLLOUT
should never be present in the
revents
bitmask at the same time.
If the remote end of a socket is closed,
poll(
)
returns a
POLLIN
event, rather than a
POLLHUP.
events
bitmask.
If
timeout
is neither zero nor INFTIM (-1), it specifies a maximum interval to
wait for any file descriptor to become ready, in milliseconds.
If
timeout
is INFTIM (-1), the poll blocks indefinitely.
If
timeout
is zero, then
poll()
will return without blocking.
If
ts
is a non-null pointer, it references a timespec structure which specifies a
maximum interval to wait for any file descriptor to become ready.
If
ts
is a null pointer,
pollts()
blocks indefinitely.
If
ts
is a non-null pointer, referencing a zero-valued timespec structure, then
pollts()
will return without blocking.
If
sigmask
is a non-null pointer, then the
pollts()
function shall replace the signal mask of the caller by the set of
signals pointed to by
sigmask
before examining the descriptors, and shall restore the signal mask
of the caller before returning.
)
returns the number of descriptors that are ready for I/O, or -1 if an
error occurred.
If the time limit expires,
poll(
)
returns 0.
If
poll(
)
returns with an error,
including one due to an interrupted call,
the
fds
array will be unmodified.
)
to return with an error.
In cases where this would have happened in the historical implementation
(e.g. trying to poll a
revoke(2)d
descriptor), this implementation instead copies the
events
bitmask to the
revents
bitmask.
Attempting to perform I/O on this descriptor will then return an error.
This behaviour is believed to be more useful.
)
indicates:
EFAULT
]
fds
points outside the process's allocated address space.
EINTR
]
EINVAL
]
)
function appeared in
AT&T
System V.3 UNIX
.
The
pollts(
)
function first appeared in
NetBSD3.0.
events
and
revents
bitmasks is really not useful without STREAMS.
The fields are defined for compatibility with existing software.