diff options
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | src/common/cbasetypes.h | 4 | ||||
-rw-r--r-- | src/common/socket.c | 11 |
3 files changed, 16 insertions, 2 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index a234ebf57..58bf624c1 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,9 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2008/06/16 + * Made the socket limit not be set in cygwin, which has bogus behavior. (bugreport:1684) [FlavioJS] + * Made the socket limit be set to the maximum allowed value when setting to FD_SETSIZE fails. 2008/06/14 * Fixed Icewall not restoring the original cell type [ultramage] * Fixed PF_FOGWALL working on Boss monsters. [Brainstorm] diff --git a/src/common/cbasetypes.h b/src/common/cbasetypes.h index 2a2d958ff..f94e9c6e7 100644 --- a/src/common/cbasetypes.h +++ b/src/common/cbasetypes.h @@ -33,6 +33,10 @@ #define MINGW #endif +#if (defined(__CYGWIN__) || defined(__CYGWIN32__)) && !defined(CYGWIN) +#define CYGWIN +#endif + // __APPLE__ is the only predefined macro on MacOS X #if defined(__APPLE__) #define __DARWIN__ diff --git a/src/common/socket.c b/src/common/socket.c index 7addc271b..022a4ae72 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -1204,7 +1204,9 @@ void socket_init(void) return; } } -#elif defined(HAVE_SETRLIMIT) +#elif defined(HAVE_SETRLIMIT) && !defined(CYGWIN) + // NOTE: getrlimit and setrlimit have bogus behaviour in cygwin. + // "Number of fds is virtually unlimited in cygwin" (sys/param.h) {// set socket limit to FD_SETSIZE struct rlimit rlp; if( 0 == getrlimit(RLIMIT_NOFILE, &rlp) ) @@ -1215,8 +1217,13 @@ void socket_init(void) rlp.rlim_max = FD_SETSIZE; if( 0 != setrlimit(RLIMIT_NOFILE, &rlp) ) {// failed + // set to maximum allowed getrlimit(RLIMIT_NOFILE, &rlp); - ShowWarning("socket_init: %s - failed to set socket limit to %d (current limit %d).\n", strerror(errno), FD_SETSIZE, (int)rlp.rlim_cur); + rlp.rlim_cur = rlp.rlim_max; + setrlimit(RLIMIT_NOFILE, &rlp); + // report limit + getrlimit(RLIMIT_NOFILE, &rlp); + ShowWarning("socket_init: failed to set socket limit to %d (current limit %d).\n", FD_SETSIZE, (int)rlp.rlim_cur); } } } |