Thu Oct 11 06:49:31 2012

Asterisk developer's documentation


poll.c File Reference

#include "asterisk.h"
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
#include <assert.h>
#include <string.h>
#include <errno.h>
#include "asterisk/utils.h"
#include "asterisk/poll-compat.h"

Include dependency graph for poll.c:

Go to the source code of this file.

Functions

int ast_poll2 (struct pollfd *pArray, unsigned long n_fds, struct timeval *tv)
 Same as poll(2), except the time is specified in microseconds and the tv argument is modified to indicate the time remaining.

Variables

unsigned int ast_FD_SETSIZE = FD_SETSIZE


Function Documentation

int ast_poll2 ( struct pollfd *  pArray,
unsigned long  n_fds,
struct timeval *  tv 
)

Same as poll(2), except the time is specified in microseconds and the tv argument is modified to indicate the time remaining.

Definition at line 264 of file poll.c.

References ast_select(), ast_tv(), ast_tvadd(), ast_tvdiff_ms(), ast_tvnow(), ast_tvsub(), and FD_ZERO.

Referenced by do_monitor().

00265 {
00266 #if !defined(AST_POLL_COMPAT)
00267    struct timeval start = ast_tvnow();
00268 #if defined(HAVE_PPOLL)
00269    struct timespec ts = { tv ? tv->tv_sec : 0, tv ? tv->tv_usec * 1000 : 0 };
00270    int res = ppoll(pArray, n_fds, tv ? &ts : NULL, NULL);
00271 #else
00272    int res = poll(pArray, n_fds, tv ? tv->tv_sec * 1000 + tv->tv_usec / 1000 : -1);
00273 #endif
00274    struct timeval after = ast_tvnow();
00275    if (res > 0 && tv && ast_tvdiff_ms(ast_tvadd(*tv, start), after) > 0) {
00276       *tv = ast_tvsub(*tv, ast_tvsub(after, start));
00277    } else if (res > 0 && tv) {
00278       *tv = ast_tv(0, 0);
00279    }
00280    return res;
00281 #else
00282    ast_fdset read_descs, write_descs, except_descs;
00283    int ready_descriptors, max_fd = 0;
00284 
00285    FD_ZERO(&read_descs);
00286    FD_ZERO(&write_descs);
00287    FD_ZERO(&except_descs);
00288 
00289    if (pArray) {
00290       max_fd = map_poll_spec(pArray, n_fds, &read_descs, &write_descs, &except_descs);
00291    }
00292 
00293    ready_descriptors = ast_select(max_fd + 1, &read_descs, &write_descs, &except_descs, tv);
00294 
00295    if (ready_descriptors >= 0) {
00296       map_select_results(pArray, n_fds, &read_descs, &write_descs, &except_descs);
00297    }
00298 
00299    return ready_descriptors;
00300 #endif
00301 }


Variable Documentation

unsigned int ast_FD_SETSIZE = FD_SETSIZE

Definition at line 86 of file poll.c.

Referenced by main().


Generated on Thu Oct 11 06:49:31 2012 for Asterisk - the Open Source PBX by  doxygen 1.5.6