X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=server.c;h=73c2888969392f2465a94856f2dca04d0f263288;hb=5474880d98533401c2b1bc12ae0d96031e4d744b;hp=3becd75a8fb4ad87d237ead85dfed2e2d8c1a019;hpb=10b49f7af56977b8c27a26438b3cfb07ca63ae90;p=apps%2Fpfixtools.git diff --git a/server.c b/server.c index 3becd75..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; } @@ -105,7 +119,7 @@ static int start_client(server_t *server, start_client_t starter, } if (starter) { - data = starter(); + data = starter(server); if (data == NULL) { close(sock); return -1; @@ -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; }