+static int max_filedesc(void)
+{
+ /* Cache it to avoid calling getrlimit all the time.
+ It won't really change over time
+ */
+ static int maxfd = -1;
+
+ if (maxfd >= 0)
+ return maxfd;
+ maxfd = MAXDESC;
+
+# ifdef HAVE_GETRLIMIT64
+ struct rlimit64 rlim;
+ (void)getrlimit64(RLIMIT_NOFILE, &rlim);
+ maxfd = rlim.rlim_cur;
+# elif HAVE_GETRLIMIT
+ struct rlimit rlim;
+ (void)getrlimit(RLIMIT_NOFILE, &rlim);
+ maxfd = rlim.rlim_cur;
+# endif
+
+ return maxfd;
+}
+
+