X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=loadcfg.c;h=dbed0a3807092cfc056f9f2500dd060be66b04fb;hp=9b39f54c9cf228cb0fe118899b974a40b1f57b85;hb=a473a2a85dbf5325b270a906e85785ba4b032503;hpb=d718332b42f884d9c3c2fd0cfa9b83f4973c6971 diff --git a/loadcfg.c b/loadcfg.c index 9b39f54c..dbed0a38 100644 --- a/loadcfg.c +++ b/loadcfg.c @@ -1460,13 +1460,41 @@ struct configuration_spec * load_config(void) { int max_client_connections = parse_numeric_value(cmd, arg); +#if !defined(_WIN32) && !defined(HAVE_POLL) + /* + * Reject values below 1 for obvious reasons and values above + * FD_SETSIZE/2 because Privoxy needs two sockets to serve + * client connections that need forwarding. + * + * We ignore the fact that the first three file descriptors + * are usually set to /dev/null, one is used for logging + * and yet another file descriptor is required to load + * config files. + */ + if ((max_client_connections < 1) || (FD_SETSIZE/2 < max_client_connections)) + { + log_error(LOG_LEVEL_FATAL, "max-client-connections value %d" + " is invalid. Value needs to be above 1 and below %d" + " (FD_SETSIZE/2).", max_client_connections, FD_SETSIZE/2); + } +#else + /* + * The Windows libc uses FD_SETSIZE for an array used + * by select(), but has no problems with file descriptors + * above the limit as long as no more than FD_SETSIZE are + * passed to select(). + * https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169%28v=vs.85%29.aspx + * + * On platforms were we use poll() we don't have to enforce + * an upper connection limit either. + */ if (max_client_connections < 1) { log_error(LOG_LEVEL_FATAL, "max-client-connections value" " has to be a number above 1. %d is invalid.", max_client_connections); } - +#endif config->max_client_connections = max_client_connections; break; }