X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fnanohttp.c;fp=src%2Fnanohttp.c;h=259ffb4eef017692f1f697365416884450b92e7c;hb=b6ddaa5f1c397b369d6523f87df831843a3efc9e;hp=3c0e9457f52001ebb10429fccb9eed66f3bbec1e;hpb=3cb026de413f8130490ada85f2bc0b460172e4ef;p=yaz-moved-to-github.git diff --git a/src/nanohttp.c b/src/nanohttp.c index 3c0e945..259ffb4 100644 --- a/src/nanohttp.c +++ b/src/nanohttp.c @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include typedef struct yaz_nano_srv_s *yaz_nano_srv_t; @@ -29,7 +29,7 @@ struct yaz_nano_srv_s { 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) @@ -40,6 +40,7 @@ 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); } } @@ -52,8 +53,6 @@ yaz_nano_srv_t yaz_nano_srv_create(const char **listeners_str) 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)); @@ -82,6 +81,8 @@ yaz_nano_srv_t yaz_nano_srv_create(const char **listeners_str) 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]) @@ -92,10 +93,11 @@ yaz_nano_srv_t yaz_nano_srv_create(const char **listeners_str) 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; } @@ -122,40 +124,6 @@ int yaz_nano_pkg_listener_id(yaz_nano_pkg_t pkg) 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; }