From d5df2d4f914907b38bc20e7c99712eff9b8be69b Mon Sep 17 00:00:00 2001 From: pk910 Date: Mon, 24 Sep 2012 16:20:29 +0200 Subject: [PATCH] added some usleep milliseconds to give IOHandler the chance to disconnect the sockets correctly --- src/ClientSocket.c | 11 ++++++++--- src/ClientSocket.h | 2 +- src/main.c | 4 +++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ClientSocket.c b/src/ClientSocket.c index 3be7037..9112b85 100644 --- a/src/ClientSocket.c +++ b/src/ClientSocket.c @@ -285,13 +285,18 @@ struct ClientSocket* getBots(int flags, struct ClientSocket* last_bot) { return NULL; } -void free_sockets() { +void free_sockets(int close_only) { if(!sockets) return; struct ClientSocket *client, *next; for (client = sockets->data; client; client = next) { next = client->next; - destroy_socket(client); + if(close_only) { + if((client->flags & SOCKET_FLAG_CONNECTED)) + iohandler_printf(client->iofd, "QUIT :[NeonServ %s.%d] shutdown requested.\n", NEONSERV_VERSION, patchlevel); + } else + destroy_socket(client); } - free(sockets); + if(!close_only) + free(sockets); sockets = NULL; } diff --git a/src/ClientSocket.h b/src/ClientSocket.h index ccc6bd7..9e73fd1 100644 --- a/src/ClientSocket.h +++ b/src/ClientSocket.h @@ -92,6 +92,6 @@ int clientsocket_parseorder_top(unsigned int tid); /* MODULAR ACCESSIBLE */ void putsock(struct ClientSocket *client, const char *text, ...) PRINTF_LIKE(2, 3); /* MODULAR ACCESSIBLE */ struct ClientSocket* getBots(int flags, struct ClientSocket* last_bot); void init_sockets(); -void free_sockets(); +void free_sockets(int close_only); #endif #endif diff --git a/src/main.c b/src/main.c index 4c7c9f4..57e4939 100644 --- a/src/main.c +++ b/src/main.c @@ -199,7 +199,9 @@ void initialize_subsystems() { void shutdown_subsystems() { stop_modules(); - free_sockets(); + free_sockets(1); + usleep(10000); //wait for disconnect (10ms) + free_sockets(0); qserver_free(); free_parser(); free_UserNode(); -- 2.20.1