21 static char *ngx_poll_init_conf(
ngx_cycle_t *cycle,
void *conf);
24 static struct pollfd *event_list;
43 ngx_poll_process_events,
72 if (event_list == NULL) {
125 "poll event fd:%d ev:%i is already set", c->
fd, event);
131 #if (NGX_READ_EVENT != POLLIN)
137 #if (NGX_WRITE_EVENT != POLLOUT)
143 "poll add event: fd:%d ev:%i", c->
fd, event);
146 event_list[nevents].fd = c->
fd;
147 event_list[nevents].events = (short) event;
148 event_list[nevents].revents = 0;
155 "poll add index: %i", e->
index);
157 event_list[e->
index].events |= (short) event;
177 "poll event fd:%d ev:%i is already deleted",
184 #if (NGX_READ_EVENT != POLLIN)
190 #if (NGX_WRITE_EVENT != POLLOUT)
196 "poll del event: fd:%d ev:%i", c->
fd, event);
204 "index: copy event %ui to %i", nevents, ev->
index);
206 event_list[ev->
index] = event_list[nevents];
212 "unexpected last event");
227 "poll del index: %i", e->
index);
229 event_list[e->
index].events &= (short) ~event;
252 for (i = 0; i < nevents; i++) {
254 "poll: %d: fd:%d ev:%04Xd",
255 i, event_list[i].fd, event_list[i].events);
262 ready = poll(event_list, (u_int) nevents, (
int) timer);
271 "poll ready %d of %d", ready, nevents);
297 "poll() returned no events without timeout");
305 for (i = 0; i < nevents && ready; i++) {
307 revents = event_list[
i].revents;
311 "poll: %d: fd:%d ev:%04Xd rev:%04Xd",
312 i, event_list[i].fd, event_list[i].events, revents);
316 "poll: %d: fd:%d ev:%04Xd rev:%04Xd",
317 i, event_list[i].fd, event_list[i].events, revents);
321 if (revents & POLLNVAL) {
323 "poll() error fd:%d ev:%04Xd rev:%04Xd",
324 event_list[i].fd, event_list[i].events, revents);
327 if (revents & ~(POLLIN|POLLOUT|POLLERR|POLLHUP|POLLNVAL)) {
329 "strange poll() events fd:%d ev:%04Xd rev:%04Xd",
330 event_list[i].fd, event_list[i].events, revents);
333 if (event_list[i].fd == -1) {
351 if (i == nevents - 1) {
354 event_list[
i].fd = -1;
360 if ((revents & (POLLERR|POLLHUP|POLLNVAL))
361 && (revents & (POLLIN|POLLOUT)) == 0)
369 revents |= POLLIN|POLLOUT;
395 if (flags & NGX_POST_THREAD_EVENTS) {
435 "poll() is not supported in the threaded mode");