X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=server.c;h=73c2888969392f2465a94856f2dca04d0f263288;hb=5474880d98533401c2b1bc12ae0d96031e4d744b;hp=0d6443c43ee5de79573ca7fcdee74bf2d44e42cb;hpb=6a736221313a18d611bc5e2c49f4fa8b354390f2;p=apps%2Fpfixtools.git diff --git a/server.c b/server.c index 0d6443c..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; }