mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-10 17:17:06 +02:00
MINOR: fd: add a new my_closefrom() function to close all FDs
This is a naive implementation of closefrom() which closes all FDs starting from the one passed in argument. closefrom() is not provided on all operating systems, and other versions will follow.
This commit is contained in:
parent
f131481a0a
commit
2d7f81b809
@ -61,6 +61,9 @@ void fd_delete(int fd);
|
||||
*/
|
||||
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);
|
||||
|
||||
|
22
src/fd.c
22
src/fd.c
@ -149,6 +149,7 @@
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/resource.h>
|
||||
|
||||
#include <common/compat.h>
|
||||
#include <common/config.h>
|
||||
@ -460,6 +461,27 @@ void fd_process_cached_events()
|
||||
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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user