Group PJ_SOCK_SELECT

group PJ_SOCK_SELECT

This module provides portable abstraction for select() like API. The abstraction is needed so that it can utilize various event dispatching mechanisms that are available across platforms.

The API is very similar to normal select() usage.

Examples

For some examples on how to use the select API, please see:

Functions

void PJ_FD_ZERO(pj_fd_set_t *fdsetp)

Initialize the descriptor set pointed to by fdsetp to the null set.

Parameters:

fdsetp – The descriptor set.

pj_size_t PJ_FD_COUNT(const pj_fd_set_t *fdsetp)

This is an internal function, application shouldn’t use this.

Get the number of descriptors in the set. This is defined in sock_select.c This function will only return the number of sockets set from PJ_FD_SET operation. When the set is modified by other means (such as by select()), the count will not be reflected here.

Parameters:

fdsetp – The descriptor set.

Returns:

Number of descriptors in the set.

void PJ_FD_SET(pj_sock_t fd, pj_fd_set_t *fdsetp)

Add the file descriptor fd to the set pointed to by fdsetp. If the file descriptor fd is already in this set, there shall be no effect on the set, nor will an error be returned.

Parameters:
  • fd – The socket descriptor.

  • fdsetp – The descriptor set.

void PJ_FD_CLR(pj_sock_t fd, pj_fd_set_t *fdsetp)

Remove the file descriptor fd from the set pointed to by fdsetp. If fd is not a member of this set, there shall be no effect on the set, nor will an error be returned.

Parameters:
  • fd – The socket descriptor.

  • fdsetp – The descriptor set.

pj_bool_t PJ_FD_ISSET(pj_sock_t fd, const pj_fd_set_t *fdsetp)

Evaluate to non-zero if the file descriptor fd is a member of the set pointed to by fdsetp, and shall evaluate to zero otherwise.

Parameters:
  • fd – The socket descriptor.

  • fdsetp – The descriptor set.

Returns:

Nonzero if fd is member of the descriptor set.

int pj_sock_select(int n, pj_fd_set_t *readfds, pj_fd_set_t *writefds, pj_fd_set_t *exceptfds, const pj_time_val *timeout)

This function wait for a number of file descriptors to change status. The behaviour is the same as select() function call which appear in standard BSD socket libraries.

Parameters:
  • n – On Unices, this specifies the highest-numbered descriptor in any of the three set, plus 1. On Windows, the value is ignored.

  • readfds – Optional pointer to a set of sockets to be checked for readability.

  • writefds – Optional pointer to a set of sockets to be checked for writability.

  • exceptfds – Optional pointer to a set of sockets to be checked for errors.

  • timeout – Maximum time for select to wait, or null for blocking operations.

Returns:

The total number of socket handles that are ready, or zero if the time limit expired, or -1 if an error occurred.

struct pj_fd_set_t
#include <sock_select.h>

Portable structure declarations for pj_fd_set. The implementation of pj_sock_select() does not use this structure per-se, but instead it will use the native fd_set structure. However, we must make sure that the size of pj_fd_set_t can accomodate the native fd_set structure.

Public Members

pj_sock_t data[PJ_IOQUEUE_MAX_HANDLES + 4]

Opaque buffer for fd_set