added some usleep milliseconds to give IOHandler the chance to disconnect the sockets...
authorpk910 <philipp@zoelle1.de>
Mon, 24 Sep 2012 14:20:29 +0000 (16:20 +0200)
committerpk910 <philipp@zoelle1.de>
Mon, 24 Sep 2012 14:21:54 +0000 (16:21 +0200)
src/ClientSocket.c
src/ClientSocket.h
src/main.c

index 3be703765123bcbe931f7dd5c03ffa2f174da235..9112b850e942a828ea1250260feacc1944cdd898 100644 (file)
@@ -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;
 }
index ccc6bd7634b9a29586d2cea3b7f84c4d3216b632..9e73fd1fbe72ba5c12dddfae51be0301e70a4632 100644 (file)
@@ -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
index 4c7c9f48f4b1d1ba5d3037fa0a4fc9c41fc496e7..57e4939b8b6d4b185bb624062b725875e30bfdfd 100644 (file)
@@ -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();