diff --git a/libtransmission/fdlimit.c b/libtransmission/fdlimit.c index f82925943..fb5736d91 100644 --- a/libtransmission/fdlimit.c +++ b/libtransmission/fdlimit.c @@ -22,6 +22,10 @@ * DEALINGS IN THE SOFTWARE. *****************************************************************************/ +#ifndef WIN32 +#define HAVE_GETRLIMIT +#endif + #include #include #include @@ -31,8 +35,10 @@ #include #include +#ifdef HAVE_GETRLIMIT #include /* getrlimit */ #include /* getrlimit */ +#endif #include #include /* basename, dirname */ #include /* O_LARGEFILE */ @@ -451,16 +457,24 @@ void tr_fdInit( int globalPeerLimit ) { int i; - struct rlimit rlim; assert( gFd == NULL ); gFd = tr_new0( struct tr_fd_s, 1 ); gFd->lock = tr_lockNew( ); - getrlimit( RLIMIT_NOFILE, &rlim ); - rlim.rlim_cur = MIN( rlim.rlim_max, (rlim_t)(globalPeerLimit + NOFILE_BUFFER) ); - setrlimit( RLIMIT_NOFILE, &rlim ); - gFd->normalMax = rlim.rlim_cur - NOFILE_BUFFER; +#ifdef HAVE_GETRLIMIT + { + struct rlimit rlim; + getrlimit( RLIMIT_NOFILE, &rlim ); + rlim.rlim_cur = MIN( rlim.rlim_max, + (rlim_t)(globalPeerLimit + NOFILE_BUFFER) ); + setrlimit( RLIMIT_NOFILE, &rlim ); + gFd->normalMax = rlim.rlim_cur - NOFILE_BUFFER; + tr_dbg( "setrlimit( RLIMIT_NOFILE, %d )", rlim.rlim_cur ); + } +#else + gFd->normalMax = globalPeerLimit; +#endif tr_dbg( "%d usable file descriptors", globalPeerLimit ); for( i=0; i