diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-03-18 15:11:52 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-03-18 15:11:52 +0000 |
commit | 199d65d059ba90a151bb326c0280a488e94f9103 (patch) | |
tree | e4deaed2cd809ebfbc852a2126329a61e890e858 /src/common | |
parent | fba2599680c32b15c20cd873ae444d6a3465e053 (diff) | |
download | tor-199d65d059ba90a151bb326c0280a488e94f9103.tar.gz tor-199d65d059ba90a151bb326c0280a488e94f9103.zip |
r18927@catbus: nickm | 2008-03-18 11:11:49 -0400
Combine common code in set_max_file_descriptors(): all that varies from platform to platform in the no-getrlimit() case is the connection limit and the platform name.
svn:r14101
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/compat.c | 51 |
1 files changed, 20 insertions, 31 deletions
diff --git a/src/common/compat.c b/src/common/compat.c index 9b9afb50f7..34b4ffae18 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -765,47 +765,36 @@ tor_socketpair(int family, int type, int protocol, int fd[2]) int set_max_file_descriptors(rlim_t limit, int *max_out) { -#define DEFAULT_MAX_CONNECTIONS 15000 -#define CYGWIN_MAX_CONNECTIONS 3200 -#define IPHONE_MAX_CONNECTIONS 9999 /* Define some maximum connections values for systems where we cannot * automatically determine a limit. Re Cygwin, see * http://archives.seul.org/or/talk/Aug-2006/msg00210.html * For an iPhone, 9999 should work. For Windows and all other unknown * systems we use 15000 as the default. */ #ifndef HAVE_GETRLIMIT +#if defined(CYGWIN) || defined(__CYGWIN__) + const char *platform = "Cygwin"; + const unsigned long MAX_CONNECTIONS = 3200; +#elif defined(IPHONE) + const char *platform = "iPhone"; + const unsigned long MAX_CONNECTIONS = 9999; +#elif defined(MS_WINDOWS) + const char *platform = "Windows"; + const unsigned long MAX_CONNECTIONS = 15000; +#else + const char *platform = "unknown platforms with no getrlimit()"; + const unsigned long MAX_CONNECTIONS = 15000; +#endif log_fn(LOG_INFO, LD_NET, "This platform is missing getrlimit(). Proceeding."); -#ifdef MS_WINDOWS - if (limit > DEFAULT_MAX_CONNECTIONS) { + if (limit > MAX_CONNECTIONS) { log_warn(LD_CONFIG, "We do not support more than %lu file descriptors " - "on Windows. Tried to raise to %lu.", - (unsigned long)DEFAULT_MAX_CONNECTIONS, (unsigned long)limit); - return -1; - } - limit = DEFAULT_MAX_CONNECTIONS; -#elif defined(CYGWIN) || defined(__CYGWIN__) - if (limit > CYGWIN_MAX_CONNECTIONS) { - log_warn(LD_CONFIG, "We do not support more than %lu file descriptors " - "when using Cygwin. Tried to raise to %lu.", - (unsigned long)CYGWIN_MAX_CONNECTIONS, (unsigned long)limit); + "on %s. Tried to raise to %lu.", + (unsigned long)MAX_CONNECTIONS, platform, (unsigned long)limit); return -1; } - limit = CYGWIN_MAX_CONNECTIONS; -#elif defined(IPHONE) - if (limit > IPHONE_MAX_CONNECTIONS) { - log_warn(LD_CONFIG, "We do not support more than %lu file descriptors " - "on iPhone. Tried to raise to %lu.", - (unsigned long)IPHONE_MAX_CONNECTIONS, (unsigned long)limit); - return -1; - } - limit = IPHONE_MAX_CONNECTIONS; -#else - /* Unknown system without getrlimit support. Use the default value.*/ - limit = DEFAULT_MAX_CONNECTIONS; -#endif -#else + limit = MAX_CONNECTIONS; +#else /* HAVE_GETRLIMIT */ struct rlimit rlim; tor_assert(limit > 0); @@ -848,7 +837,7 @@ set_max_file_descriptors(rlim_t limit, int *max_out) bad = 0; } } -#endif +#endif /* OPEN_MAX */ if (bad) { log_warn(LD_CONFIG,"Couldn't set maximum number of file descriptors: %s", strerror(errno)); @@ -857,7 +846,7 @@ set_max_file_descriptors(rlim_t limit, int *max_out) } /* leave some overhead for logs, etc, */ limit = rlim.rlim_cur; -#endif +#endif /* HAVE_GETRLIMIT */ if (limit < ULIMIT_BUFFER) { log_warn(LD_CONFIG, |