From: Pekka Riikonen Date: Tue, 9 Mar 2004 15:13:06 +0000 (+0000) Subject: Do not user socket as number of socket connections. X-Git-Tag: silc.server.0.9.19~86 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=677d252cf9435d87a235ab461fb53f53de67e8f4;p=silc.git Do not user socket as number of socket connections. --- diff --git a/CHANGES b/CHANGES index a1a520bd..6fb84779 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,10 @@ +Tue Mar 9 17:11:58 EET 2004 Pekka Riikonen + + * 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 * Fixed crashbug in connection closing, after a protocol diff --git a/apps/silcd/server.c b/apps/silcd/server.c index 20188476..68686e03 100644 --- a/apps/silcd/server.c +++ b/apps/silcd/server.c @@ -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); diff --git a/apps/silcd/server_internal.h b/apps/silcd/server_internal.h index 6ee26c49..ebbeadab 100644 --- a/apps/silcd/server_internal.h +++ b/apps/silcd/server_internal.h @@ -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; /* diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index 048757d3..fb1bbaae 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -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) { diff --git a/apps/silcd/silcd.c b/apps/silcd/silcd.c index 3635f169..5017ed6b 100644 --- a/apps/silcd/silcd.c +++ b/apps/silcd/silcd.c @@ -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