Bitfield expansions for ast_select. More...


Go to the source code of this file.
Data Structures | |
| struct | ast_fdset |
Defines | |
| #define | _bitsize(a) (sizeof(a) * 8) |
| #define | ast_FDMAX 32768 |
| #define | FD_SET(fd, fds) |
| #define | FD_ZERO(a) |
Functions | |
| static int | ast_select (int nfds, ast_fdset *rfds, ast_fdset *wfds, ast_fdset *efds, struct timeval *tvp) |
| Waits for activity on a group of channels. | |
Variables | |
| unsigned int | ast_FD_SETSIZE |
Bitfield expansions for ast_select.
Definition in file select.h.
| #define FD_SET | ( | fd, | |
| fds | |||
| ) |
Definition at line 58 of file select.h.
Referenced by main(), and wait_result().
| #define FD_ZERO | ( | a | ) |
Definition at line 49 of file select.h.
Referenced by ast_poll2(), main(), and wait_result().
| static int ast_select | ( | int | nfds, |
| ast_fdset * | rfds, | ||
| ast_fdset * | wfds, | ||
| ast_fdset * | efds, | ||
| struct timeval * | tvp | ||
| ) | [inline, static] |
Waits for activity on a group of channels.
| nfds | the maximum number of file descriptors in the sets |
| rfds | file descriptors to check for read availability |
| wfds | file descriptors to check for write availability |
| efds | file descriptors to check for exceptions (OOB data) |
| tvp | timeout while waiting for events This is the same as a standard select(), except it guarantees the behaviour where the passed struct timeval is updated with how much time was not slept while waiting for the specified events |
Definition at line 81 of file select.h.
References errno, and timersub().
Referenced by ast_poll2(), and main().
{
#ifdef __linux__
return select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, tvp);
#else
int save_errno = 0;
if (tvp) {
struct timeval tv, tvstart, tvend, tvlen;
int res;
tv = *tvp;
gettimeofday(&tvstart, NULL);
res = select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, tvp);
save_errno = errno;
gettimeofday(&tvend, NULL);
timersub(&tvend, &tvstart, &tvlen);
timersub(&tv, &tvlen, tvp);
if (tvp->tv_sec < 0 || (tvp->tv_sec == 0 && tvp->tv_usec < 0)) {
tvp->tv_sec = 0;
tvp->tv_usec = 0;
}
errno = save_errno;
return res;
}
else
return select(nfds, (fd_set *) rfds, (fd_set *) wfds, (fd_set *) efds, NULL);
#endif
}
| unsigned int ast_FD_SETSIZE |