+#if NPOLL
+ for (p = *iochans; p; p = p->next)
+ no_fds++;
+ fds = xmalloc(no_fds * sizeof(*fds));
+ for (i = 0, p = *iochans; p; p = p->next, i++)
+ {
+ time_t w, ftime;
+ enum yaz_poll_mask input_mask = 0;
+ yaz_log(log_level, "fd=%d flags=%d force_event=%d",
+ p->fd, p->flags, p->force_event);
+ if (p->force_event)
+ tv_sec = 0; /* polling select */
+ if (p->flags & EVENT_INPUT)
+ input_mask += yaz_poll_read;
+ if (p->flags & EVENT_OUTPUT)
+ input_mask += yaz_poll_write;
+ if (p->flags & EVENT_EXCEPT)
+ input_mask += yaz_poll_except;
+ if (p->max_idle && p->last_event)
+ {
+ ftime = p->last_event + p->max_idle;
+ if (ftime < now)
+ w = p->max_idle;
+ else
+ w = ftime - now;
+ if (w < tv_sec)
+ tv_sec = w;
+ }
+ fds[i].fd = p->fd;
+ fds[i].input_mask = input_mask;
+ }
+ res = yaz_poll(fds, no_fds, tv_sec);
+#else