#include <unistd.h>#include <sys/types.h>#include <sys/time.h>#include <assert.h>#include <string.h>#include "asterisk/poll-compat.h"Include dependency graph for poll.c:

Go to the source code of this file.
Defines | |
| #define | MAX(a, b) ((a) > (b) ? (a) : (b)) |
Functions | |
| static int | map_poll_spec (struct pollfd *pArray, unsigned long n_fds, fd_set *pReadSet, fd_set *pWriteSet, fd_set *pExceptSet) |
| static void | map_select_results (struct pollfd *pArray, unsigned long n_fds, fd_set *pReadSet, fd_set *pWriteSet, fd_set *pExceptSet) |
| static struct timeval * | map_timeout (int poll_timeout, struct timeval *pSelTimeout) |
| int | poll (structpollfd *pArray, unsigned long n_fds, int timeout) |
|
|
Definition at line 87 of file poll.c. Referenced by handle_response_register(), map_poll_spec(), and sound_thread(). |
|
||||||||||||||||||||||||
|
Definition at line 103 of file poll.c. References pollfd::events, pollfd::fd, MAX, POLLIN, POLLOUT, and POLLPRI. Referenced by poll(). 00110 {
00111 register unsigned long i; /* loop control */
00112 register struct pollfd *pCur; /* current array element */
00113 register int max_fd = -1; /* return value */
00114
00115 /*
00116 Map the poll() structures into the file descriptor sets required
00117 by select().
00118 */
00119 for (i = 0, pCur = pArray; i < n_fds; i++, pCur++)
00120 {
00121 /* Skip any bad FDs in the array. */
00122
00123 if (pCur->fd < 0)
00124 continue;
00125
00126 if (pCur->events & POLLIN)
00127 {
00128 /* "Input Ready" notification desired. */
00129 FD_SET (pCur->fd, pReadSet);
00130 }
00131
00132 if (pCur->events & POLLOUT)
00133 {
00134 /* "Output Possible" notification desired. */
00135 FD_SET (pCur->fd, pWriteSet);
00136 }
00137
00138 if (pCur->events & POLLPRI)
00139 {
00140 /*
00141 "Exception Occurred" notification desired. (Exceptions
00142 include out of band data.
00143 */
00144 FD_SET (pCur->fd, pExceptSet);
00145 }
00146
00147 max_fd = MAX (max_fd, pCur->fd);
00148 }
00149
00150 return max_fd;
00151 }
|
|
||||||||||||||||||||||||
|
Definition at line 221 of file poll.c. References pollfd::fd, POLLIN, POLLOUT, POLLPRI, and pollfd::revents. Referenced by poll(). 00228 {
00229 register unsigned long i; /* loop control */
00230 register struct pollfd *pCur; /* current array element */
00231
00232 for (i = 0, pCur = pArray; i < n_fds; i++, pCur++)
00233 {
00234 /* Skip any bad FDs in the array. */
00235
00236 if (pCur->fd < 0)
00237 continue;
00238
00239 /* Exception events take priority over input events. */
00240
00241 pCur->revents = 0;
00242 if (FD_ISSET (pCur->fd, pExceptSet))
00243 pCur->revents |= POLLPRI;
00244
00245 else if (FD_ISSET (pCur->fd, pReadSet))
00246 pCur->revents |= POLLIN;
00247
00248 if (FD_ISSET (pCur->fd, pWriteSet))
00249 pCur->revents |= POLLOUT;
00250 }
00251
00252 return;
00253 }
|
|
||||||||||||
|
Definition at line 157 of file poll.c. Referenced by poll(). 00161 {
00162 struct timeval *pResult;
00163
00164 /*
00165 Map the poll() timeout value into a select() timeout. The possible
00166 values of the poll() timeout value, and their meanings, are:
00167
00168 VALUE MEANING
00169
00170 -1 wait indefinitely (until signal occurs)
00171 0 return immediately, don't block
00172 >0 wait specified number of milliseconds
00173
00174 select() uses a "struct timeval", which specifies the timeout in
00175 seconds and microseconds, so the milliseconds value has to be mapped
00176 accordingly.
00177 */
00178
00179 assert (pSelTimeout != (struct timeval *) NULL);
00180
00181 switch (poll_timeout)
00182 {
00183 case -1:
00184 /*
00185 A NULL timeout structure tells select() to wait indefinitely.
00186 */
00187 pResult = (struct timeval *) NULL;
00188 break;
00189
00190 case 0:
00191 /*
00192 "Return immediately" (test) is specified by all zeros in
00193 a timeval structure.
00194 */
00195 pSelTimeout->tv_sec = 0;
00196 pSelTimeout->tv_usec = 0;
00197 pResult = pSelTimeout;
00198 break;
00199
00200 default:
00201 /* Wait the specified number of milliseconds. */
00202 pSelTimeout->tv_sec = poll_timeout / 1000; /* get seconds */
00203 poll_timeout %= 1000; /* remove seconds */
00204 pSelTimeout->tv_usec = poll_timeout * 1000; /* get microseconds */
00205 pResult = pSelTimeout;
00206 break;
00207 }
00208
00209
00210 return pResult;
00211 }
|
|
||||||||||||||||
|
Definition at line 264 of file poll.c. References map_poll_spec(), map_select_results(), and map_timeout(). Referenced by ast_carefulwrite(), ast_el_read_char(), ast_io_wait(), ast_remotecontrol(), ast_wait_for_input(), ast_waitfor_n_fd(), ast_waitfor_nandfds(), do_monitor(), get_input(), launch_netscript(), listener(), main(), netconsole(), timed_read(), zt_sendtext(), and zt_setoption(). 00270 {
00271 fd_set read_descs; /* input file descs */
00272 fd_set write_descs; /* output file descs */
00273 fd_set except_descs; /* exception descs */
00274 struct timeval stime; /* select() timeout value */
00275 int ready_descriptors; /* function result */
00276 int max_fd; /* maximum fd value */
00277 struct timeval *pTimeout; /* actually passed */
00278
00279 FD_ZERO (&read_descs);
00280 FD_ZERO (&write_descs);
00281 FD_ZERO (&except_descs);
00282
00283 assert (pArray != (struct pollfd *) NULL);
00284
00285 /* Map the poll() file descriptor list in the select() data structures. */
00286
00287 max_fd = map_poll_spec (pArray, n_fds,
00288 &read_descs, &write_descs, &except_descs);
00289
00290 /* Map the poll() timeout value in the select() timeout structure. */
00291
00292 pTimeout = map_timeout (timeout, &stime);
00293
00294 /* Make the select() call. */
00295
00296 ready_descriptors = select (max_fd + 1, &read_descs, &write_descs,
00297 &except_descs, pTimeout);
00298
00299 if (ready_descriptors >= 0)
00300 {
00301 map_select_results (pArray, n_fds,
00302 &read_descs, &write_descs, &except_descs);
00303 }
00304
00305 return ready_descriptors;
00306 }
|
1.4.2