+
+ yaz_log(m_log, "select returned res=%d", res);
+ now = time(0);
+ for (i = 0, p = m_observers; p; p = p->next, i++)
+ {
+ enum yaz_poll_mask output_mask = fds[i].output_mask;
+
+ int mask = 0;
+ if (output_mask & yaz_poll_read)
+ mask |= SOCKET_OBSERVE_READ;
+
+ if (output_mask & yaz_poll_write)
+ mask |= SOCKET_OBSERVE_WRITE;
+
+ if (output_mask & yaz_poll_except)
+ mask |= SOCKET_OBSERVE_EXCEPT;
+
+ if (mask)
+ {
+ SocketEvent *event = new SocketEvent;
+ p->last_activity = now;
+ event->observer = p->observer;
+ event->event = mask;
+ putEvent (event);
+
+ yaz_log (m_log, "putEvent I/O mask=%d", mask);
+ }
+ else if (res == 0 && p->timeout_this == timeout)
+ {
+ SocketEvent *event = new SocketEvent;
+ assert (p->last_activity);
+ yaz_log (m_log, "putEvent timeout fd=%d, now = %ld last_activity=%ld timeout=%d",
+ p->fd, now, p->last_activity, p->timeout);
+ p->last_activity = now;
+ event->observer = p->observer;
+ event->event = SOCKET_OBSERVE_TIMEOUT;
+ putEvent (event);
+ }
+ }
+ delete [] fds;