Do not user socket as number of socket connections.
authorPekka Riikonen <priikone@silcnet.org>
Tue, 9 Mar 2004 15:13:06 +0000 (15:13 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Tue, 9 Mar 2004 15:13:06 +0000 (15:13 +0000)
CHANGES
apps/silcd/server.c
apps/silcd/server_internal.h
apps/silcd/server_util.c
apps/silcd/silcd.c

diff --git a/CHANGES b/CHANGES
index a1a520bda05b7eb75694e1a3bf908585ace47646..6fb847792ce0dd5abe95c8b382f95b8d345294e6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+Tue Mar  9 17:11:58 EET 2004  Pekka Riikonen <priikone@silcnet.org>
+
+       * Check the number of connections from real number of
+         connections instead of socket number, when deciding if
+         server is full.  Affected files are silcd/server.c,
+         server_internal.h and silcd.c.
+
 Wed Mar  3 15:13:49 CET 2004  Pekka Riikonen <priikone@silcnet.org>
 
        * Fixed crashbug in connection closing, after a protocol
index 20188476f68f96e6aa3bea390095a2e0702580ed..68686e03f9e47cdab78b8a9e47ffa69f48499d82 100644 (file)
@@ -812,6 +812,7 @@ void silc_server_stop(SilcServer server)
       } else {
        silc_socket_free(server->sockets[i]);
        server->sockets[i] = NULL;
+        server->stat.conn_num--;
       }
     }
 
@@ -1725,12 +1726,13 @@ SILC_TASK_CALLBACK(silc_server_accept_new_connection)
   }
 
   /* Check for maximum allowed connections */
-  if (sock > server->config->param.connections_max) {
+  if (server->stat.conn_num > server->config->param.connections_max) {
     SILC_LOG_ERROR(("Refusing connection, server is full"));
     server->stat.conn_failures++;
     silc_net_close_connection(sock);
     return;
   }
+  server->stat.conn_num++;
 
   /* Set socket options */
   silc_net_set_socket_nonblock(sock);
@@ -3197,6 +3199,7 @@ SILC_TASK_CALLBACK(silc_server_close_connection_final)
   /* Close the actual connection */
   silc_net_close_connection(sock->sock);
   server->sockets[sock->sock] = NULL;
+  server->stat.conn_num--;
 
   /* We won't listen for this connection anymore */
   silc_schedule_task_del_by_fd(server->schedule, sock->sock);
index 6ee26c49d349a60dc8b681b45e5d67869d6658d6..ebbeadab6be30a6f35f6343e6f70271247206f03 100644 (file)
@@ -61,6 +61,7 @@ typedef struct {
   SilcUInt32 auth_failures;              /* Authentication failures */
   SilcUInt32 packets_sent;               /* Sent SILC packets */
   SilcUInt32 packets_received;           /* Received SILC packets */
+  SilcUInt32 conn_num;                   /* Number of connections */
 } SilcServerStatistics;
 
 /*
index 048757d3aa5f47cffd99cfc57e31db10fc021c3a..fb1bbaae737f64bb3a45cec57846a9a4e4b010d6 100644 (file)
@@ -1537,7 +1537,7 @@ void silc_server_send_connect_notifys(SilcServer server,
 
   if (server->stat.cell_clients && server->stat.cell_servers + 1)
     SILC_SERVER_SEND_NOTIFY(server, sock, SILC_NOTIFY_TYPE_NONE,
-                           ("There are %d clients on %d server in our cell",
+                           ("There are %d clients on %d servers in our cell",
                             server->stat.cell_clients,
                             server->stat.cell_servers));
   if (server->server_type == SILC_ROUTER) {
index 3635f169b84afa95888bc7dc37b08f6006e4a614..5017ed6b66d6b988b20ee539fe94231bc21d25f8 100644 (file)
@@ -302,6 +302,7 @@ SILC_TASK_CALLBACK(dump_stats)
   STAT_OUTPUT("  Authentication failures : %d", silcd->stat.auth_failures);
   STAT_OUTPUT("  Packets sent            : %d", silcd->stat.packets_sent);
   STAT_OUTPUT("  Packets received        : %d", silcd->stat.packets_received);
+  STAT_OUTPUT("  Connections             : %d", silcd->stat.conn_num);
 
 #undef STAT_OUTPUT