* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: eventl.c,v 1.13 2007-11-09 18:49:19 adam Exp $
+ * $Id: eventl.c,v 1.16 2007-11-12 08:41:56 adam Exp $
*/
/**
* \brief Implements event loop handling for GFS.
*
* This source implements the main event loop for the Generic Frontend
- * Server. It uses select(2).
+ * Server.
*/
#include <assert.h>
int iochan_is_alive(IOCHAN chan)
{
- static struct timeval to;
- fd_set in, out, except;
- int res, max;
+ struct yaz_poll_fd fds;
+ int res;
- to.tv_sec = 0;
- to.tv_usec = 0;
-
- FD_ZERO(&in);
- FD_ZERO(&out);
- FD_ZERO(&except);
-
- FD_SET(chan->fd, &in);
-
- max = chan->fd + 1;
-
- res = YAZ_EV_SELECT(max + 1, &in, 0, 0, &to);
+ fds.fd = chan->fd;
+ fds.input_mask = yaz_poll_read;
+ res = yaz_poll(&fds, 1, 0, 0);
if (res == 0)
return 1;
if (!ir_read(chan, EVENT_INPUT))
return 1;
}
-int event_loop(IOCHAN *iochans)
+int iochan_event_loop(IOCHAN *iochans)
{
do /* loop as long as there are active associations to process */
{
fds[i].fd = p->fd;
fds[i].input_mask = input_mask;
}
- res = yaz_poll(fds, no_fds, tv_sec);
+ res = yaz_poll(fds, no_fds, tv_sec, 0);
if (res < 0)
{
if (yaz_errno() == EINTR)