| #define APR_POLLERR 0x010 |
Pending error
| #define APR_POLLHUP 0x020 |
Hangup occurred
| #define APR_POLLIN 0x001 |
Poll options Can read without blocking
| #define APR_POLLNVAL 0x040 |
Descriptior invalid
| #define APR_POLLOUT 0x004 |
Can write without blocking
| #define APR_POLLPRI 0x002 |
Priority data available
| #define APR_POLLSET_THREADSAFE 0x001 |
Pollset Flags Adding or Removing a Descriptor is thread safe
| typedef struct apr_pollfd_t apr_pollfd_t |
| typedef struct apr_pollset_t apr_pollset_t |
Opaque structure used for pollset API
| enum apr_datatype_e |
Used in apr_pollfd_t to determine what the apr_descriptor is
| apr_status_t apr_poll | ( | apr_pollfd_t * | aprset, | |
| apr_int32_t | numsock, | |||
| apr_int32_t * | nsds, | |||
| apr_interval_time_t | timeout | |||
| ) |
Poll the descriptors in the poll structure
| aprset | The poll structure we will be using. | |
| numsock | The number of descriptors we are polling | |
| nsds | The number of descriptors signalled. | |
| timeout | The amount of time in microseconds to wait. This is a maximum, not a minimum. If a descriptor is signalled, we will wake up before this time. A negative number means wait until a descriptor is signalled. |
The rtnevents field in the apr_pollfd_t array will only be filled- in if the return value is APR_SUCCESS.
| apr_status_t apr_pollset_add | ( | apr_pollset_t * | pollset, | |
| const apr_pollfd_t * | descriptor | |||
| ) |
Add a socket or file descriptor to a pollset
| pollset | The pollset to which to add the descriptor | |
| descriptor | The descriptor to add |
If the pollset has been created with APR_POLLSET_THREADSAFE and thread T1 is blocked in a call to apr_pollset_poll() for this same pollset that is being modified via apr_pollset_add() in thread T2, the currently executing apr_pollset_poll() call in T1 will either: (1) automatically include the newly added descriptor in the set of descriptors it is watching or (2) return immediately with APR_EINTR. Option (1) is recommended, but option (2) is allowed for implementations where option (1) is impossible or impractical.
| apr_status_t apr_pollset_create | ( | apr_pollset_t ** | pollset, | |
| apr_uint32_t | size, | |||
| apr_pool_t * | p, | |||
| apr_uint32_t | flags | |||
| ) |
Setup a pollset object
| pollset | The pointer in which to return the newly created object | |
| size | The maximum number of descriptors that this pollset can hold | |
| p | The pool from which to allocate the pollset | |
| flags | Optional flags to modify the operation of the pollset. |
| apr_status_t apr_pollset_destroy | ( | apr_pollset_t * | pollset | ) |
Destroy a pollset object
| pollset | The pollset to destroy |
| apr_status_t apr_pollset_poll | ( | apr_pollset_t * | pollset, | |
| apr_interval_time_t | timeout, | |||
| apr_int32_t * | num, | |||
| const apr_pollfd_t ** | descriptors | |||
| ) |
Block for activity on the descriptor(s) in a pollset
| pollset | The pollset to use | |
| timeout | Timeout in microseconds | |
| num | Number of signalled descriptors (output parameter) | |
| descriptors | Array of signalled descriptors (output parameter) |
| apr_status_t apr_pollset_remove | ( | apr_pollset_t * | pollset, | |
| const apr_pollfd_t * | descriptor | |||
| ) |
Remove a descriptor from a pollset
| pollset | The pollset from which to remove the descriptor | |
| descriptor | The descriptor to remove |
1.5.1