nn_poll(3) ========== NAME ---- nn_poll - poll a set of SP sockets for readability and/or writability SYNOPSIS -------- *#include * *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_pollds 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 et c. EXAMPLE ------- ---- struct nn_polld 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