X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/7bab07d4d30245bf5ba272b236dc7b1c1e309c4d..1d39b466d4ddd974674c9397589d45935c746ed0:/src/ircd.c diff --git a/src/ircd.c b/src/ircd.c index 9708dc5..5e108e0 100644 --- a/src/ircd.c +++ b/src/ircd.c @@ -76,7 +76,7 @@ extern int ServerRunning; extern struct LocalUser meLocalUser; extern char **myargv; -int maxconnections; /* XXX */ +int maxconnections; /* /quote set variables */ struct SetOptions GlobalSetOptions; @@ -153,21 +153,22 @@ ircd_die_cb(const char *str) static void init_sys(void) { -#if defined(RLIMIT_NOFILE) && defined(HAVE_SYS_RESOURCE_H) - struct rlimit limit; - - if(!getrlimit(RLIMIT_NOFILE, &limit)) - { - limit.rlim_cur = limit.rlim_max; /* make soft limit the max */ - if(setrlimit(RLIMIT_NOFILE, &limit) == -1) - { - fprintf(stderr, "error setting max fd's to %ld\n", (long) limit.rlim_cur); - exit(EXIT_FAILURE); - } - } - - maxconnections = limit.rlim_cur; -#endif /* RLIMIT_NOFILE */ +#if defined(RLIMIT_NOFILE) && defined(HAVE_SYS_RESOURCE_H) + struct rlimit limit; + + if(!getrlimit(RLIMIT_NOFILE, &limit)) + { + maxconnections = limit.rlim_cur; + if(maxconnections <= MAX_BUFFER) + { + fprintf(stderr, "ERROR: Shell FD limits are too low.\n"); + fprintf(stderr, "ERROR: ircd-ratbox reserves %d FDs, shell limits must be above this\n", MAX_BUFFER); + exit(EXIT_FAILURE); + } + return; + } +#endif /* RLIMIT_FD_MAX */ + maxconnections = MAXCONNECTIONS; } static int @@ -279,7 +280,11 @@ initialize_global_set_options(void) memset(&GlobalSetOptions, 0, sizeof(GlobalSetOptions)); /* memset( &ConfigFileEntry, 0, sizeof(ConfigFileEntry)); */ - GlobalSetOptions.maxclients = ServerInfo.max_clients; + GlobalSetOptions.maxclients = ServerInfo.default_max_clients; + + if(GlobalSetOptions.maxclients > (maxconnections - MAX_BUFFER)) + GlobalSetOptions.maxclients = maxconnections - MAX_BUFFER; + GlobalSetOptions.autoconn = 1; GlobalSetOptions.spam_time = MIN_JOIN_LEAVE_TIME;