*/
void fd_remove(int fd);
+/* close all FDs starting from <start> */
+void my_closefrom(int start);
+
/* disable the specified poller */
void disable_poller(const char *poller_name);
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
+#include <sys/resource.h>
#include <common/compat.h>
#include <common/config.h>
fdlist_process_cached_events(&fd_cache);
}
+/* This is a portable implementation of closefrom(). It closes all open file
+ * descriptors starting at <start> and above. This is a naive version for use
+ * when the operating system provides no alternative.
+ */
+void my_closefrom(int start)
+{
+ struct rlimit limit;
+ int nbfds;
+
+ if (getrlimit(RLIMIT_NOFILE, &limit) == 0)
+ nbfds = limit.rlim_cur;
+ else
+ nbfds = 0;
+
+ if (nbfds <= 0)
+ nbfds = 1024; /* safe limit */
+
+ while (start < nbfds)
+ close(start++);
+}
+
/* disable the specified poller */
void disable_poller(const char *poller_name)
{