#include <yaz/comstack.h>
#include <yaz/nmem.h>
#include <yaz/log.h>
-#include <yaz/poll.h>
+#include <yaz/sock_man.h>
#include <assert.h>
typedef struct yaz_nano_srv_s *yaz_nano_srv_t;
COMSTACK *cs_listeners;
size_t num_listeners;
NMEM nmem;
- struct yaz_poll_fd *fds;
+ yaz_sock_man_t sock_man;
};
void yaz_nano_srv_destroy(yaz_nano_srv_t p)
for (i = 0; i < p->num_listeners; i++)
if (p->cs_listeners[i])
cs_close(p->cs_listeners[i]);
+ yaz_sock_man_destroy(p->sock_man);
nmem_destroy(p->nmem);
}
}
for (i = 0; listeners_str[i]; i++)
;
p->nmem = nmem;
- p->chan_list = 0;
- p->free_list = 0;
p->num_listeners = i;
p->cs_listeners =
nmem_malloc(nmem, p->num_listeners * sizeof(*p->cs_listeners));
p->cs_listeners[i] = l; /* success */
}
}
+ p->sock_man = yaz_sock_man_new();
+
/* check if all are OK */
for (i = 0; i < p->num_listeners; i++)
if (!p->cs_listeners[i])
for (i = 0; i < p->num_listeners; i++)
{
- struct socket_chan *chan =
- socket_chan_new(p, cs_fileno(p->cs_listeners[i]),
- p->cs_listeners + i);
- socket_chan_set_mask(chan, yaz_poll_read | yaz_poll_except);
+ yaz_sock_chan_t chan;
+
+ chan = yaz_sock_chan_new(p->sock_man, cs_fileno(p->cs_listeners[i]),
+ p->cs_listeners + i,
+ yaz_poll_read | yaz_poll_except);
}
return p;
}
yaz_nano_pkg_t yaz_nano_srv_get_pkg(yaz_nano_srv_t p)
{
- size_t i;
- int ret;
- int num_fds = 0;
- struct yaz_poll_fd *fds;
- struct socket_chan *chan = p->chan_list;
- for (chan = p->chan_list; chan; chan = chan->next)
- num_fds++;
- fds = xmalloc(num_fds * sizeof(*fds));
- for (i = 0, chan = p->chan_list; chan; chan = chan->next)
- {
- fds[i].input_mask = chan->mask;
- fds[i].fd = chan->fd;
- fds[i].client_data = chan;
- }
- ret = yaz_poll(fds, num_fds, 0, 0);
- if (ret == -1)
- {
- yaz_log(YLOG_WARN, "yaz_poll error");
- }
- else if (ret == 0)
- {
- yaz_log(YLOG_LOG, "yaz_poll timeout");
- }
- else
- {
- for (i = 0, chan = p->chan_list; chan; chan = chan->next)
- {
- if (fds[i].output_mask)
- {
- yaz_log(YLOG_LOG, "event on chan=%p", chan);
- }
- }
- }
- xfree(fds);
return 0;
}