X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=server.c;h=73c2888969392f2465a94856f2dca04d0f263288;hb=5474880d98533401c2b1bc12ae0d96031e4d744b;hp=203808ca2cda46342a0ffd4428eb6e2737845767;hpb=9444dcb2ea8e2b24883d3f5740e28ca20d467ad2;p=apps%2Fpfixtools.git diff --git a/server.c b/server.c index 203808c..73c2888 100644 --- a/server.c +++ b/server.c @@ -36,6 +36,10 @@ #include "server.h" #include "epoll.h" +static server_t *listeners[1024]; +static int listener_count = 0; + + static server_t* server_new(void) { server_t* server = p_new(server_t, 1); @@ -58,6 +62,15 @@ static void server_delete(server_t **server) } } +static void server_shutdown(void) +{ + for (int i = 0 ; i < listener_count ; ++i) { + server_delete(&listeners[i]); + } +} + +module_exit(server_shutdown); + int start_server(int port, start_listener_t starter, delete_client_t deleter) { struct sockaddr_in addr = { @@ -88,6 +101,7 @@ int start_server(int port, start_listener_t starter, delete_client_t deleter) tmp->data = data; tmp->clear_data = deleter; epoll_register(sock, EPOLLIN, tmp); + listeners[listener_count++] = tmp; return 0; } @@ -130,7 +144,7 @@ int server_loop(start_client_t starter, delete_client_t deleter, if (n < 0) { if (errno != EAGAIN && errno != EINTR) { UNIXERR("epoll_wait"); - return -1; + return EXIT_FAILURE; } continue; } @@ -161,5 +175,5 @@ int server_loop(start_client_t starter, delete_client_t deleter, } } } - return 0; + return EXIT_SUCCESS; }