+/* Return maximum number of open files */
+int
+get_max_open_files ()
+{
+#if defined _SC_OPEN_MAX
+ return sysconf (_SC_OPEN_MAX);
+#elif defined RLIMIT_NOFILE
+ struct rlimit rlim;
+
+ if (getrlimit(RLIMIT_NOFILE, &rlim) == 0)
+ return rlim.rlim_max;
+#elif defined HAVE_GETDTABLESIZE
+ return getdtablesize ();
+#endif
+ return -1;
+}
+
+/* Close all descriptors, except the first three */
+void
+closeopen ()
+{
+ int i;
+
+ for (i = get_max_open_files () - 1; i > 2; i--)
+ close (i);
+}
+