blob: 3a212237d595b1ce65006d0899b11d70db4b2c54 [file] [log] [blame]
nn_poll(3)
==========
NAME
----
nn_poll - poll a set of SP sockets for readability and/or writability
SYNOPSIS
--------
*#include <nanomsg/nn.h>*
*int nn_poll (struct nn_pollfd *fds, int nfds, int timeout);*
DESCRIPTION
-----------
The function checks a set of SP socket and reports whether it's possible to
send a message to the socket and/or receive a message from each socket.
'fds' argument is an array of nn_pollfd structures with 'nfds' argument
specifying the size of the array:
----
struct nn_pollfd {
int fd;
short events;
short revents;
};
----
Each entry in the array represents an SP socket to check. 'events' field
specifies which events to check for. The value is a bitwise combination of
the following values:
*NN_POLLIN*::
Check whether at least one message can be received from the 'fd' socket without
blocking.
*NN_POLLOUT*::
Check whether at least one message can be sent to the 'fd' socket without
blocking.
After the function returns, 'revents' field contains bitwise combination of
NN_POLLIN and NN_POLLOUT according to whether the socket is readable or
writable.
'timeout' parameter specifies how long (in milliseconds) should the function
block if there are no events to report.
RETURN VALUE
------------
Upon successful completion, the number of nn_pollfds structures with events
signaled is returned. In case of timeout, return value is 0. In case of error,
-1 is returned and 'errno' is set the one of the values below.
ERRORS
------
*EBADF*::
Some of the provided sockets are invalid.
*EINTR*::
The operation was interrupted by delivery of a signal before the message was
sent.
*ETERM*::
The library is terminating.
NOTE
----
nn_poll is a convenience function. You can achieve same behaviour by using
NN_RCVFD and NN_SNDFD socket options. However, using the socket options
allows for usage that's not possible with nn_poll, such as simultaneous polling
for both SP and OS-level sockets, integration of SP sockets with external event
loops etc.
EXAMPLE
-------
----
struct nn_pollfd pfd [2];
pfd [0].fd = s1;
pfd [0].events = NN_POLLIN | NN_POLLOUT;
pfd [1].fd = s2;
pfd [1].events = NN_POLLIN;
rc = nn_poll (pfd, 2, 2000);
if (rc == 0) {
printf ("Timeout!");
exit (1);
}
if (rc == -1) {
printf ("Error!");
exit (1);
}
if (pfd [0].revents & NN_POLLIN) {
printf ("Message can be received from s1!");
exit (1);
}
----
SEE ALSO
--------
linknanomsg:nn_socket[3]
linknanomsg:nn_getsockopt[3]
linknanomsg:nanomsg[7]
AUTHORS
-------
Martin Sustrik <sustrik@250bpm.com>