37
37
#if defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)
39
39
#ifndef RLIM_INFINITY
40
#define RLIM_INFINITY ((uint32_t) 0xffffffff)
40
#define RLIM_INFINITY ((rlim_t) 0xffffffff)
43
43
static uint64_t set_max_open_files(uint64_t max_file_limit)
48
if (!getrlimit(RLIMIT_NOFILE,&rlimit))
48
if (!getrlimit(RLIMIT_NOFILE,&rlim))
50
old_cur= rlimit.rlim_cur;
51
if (rlimit.rlim_cur == RLIM_INFINITY)
52
rlimit.rlim_cur = max_file_limit;
53
if (rlimit.rlim_cur >= max_file_limit)
50
old_cur= rlim.rlim_cur;
51
if (rlim.rlim_cur == (rlim_t)RLIM_INFINITY)
52
rlim.rlim_cur = max_file_limit;
53
if (rlim.rlim_cur >= max_file_limit)
55
if (rlimit.rlim_cur > UINT32_MAX)
58
return((uint32_t)rlimit.rlim_cur);
60
rlimit.rlim_cur= rlimit.rlim_max= max_file_limit;
61
if (setrlimit(RLIMIT_NOFILE, &rlimit))
57
rlim.rlim_cur= rlim.rlim_max= max_file_limit;
58
if (setrlimit(RLIMIT_NOFILE, &rlim))
62
59
max_file_limit= (old_cur < UINT32_MAX) ? (uint32_t)old_cur : UINT32_MAX;
65
rlimit.rlim_cur= 0; /* Safety if next call fails */
66
(void) getrlimit(RLIMIT_NOFILE,&rlimit);
67
if (rlimit.rlim_cur) /* If call didn't fail */
68
max_file_limit= (uint32_t) rlimit.rlim_cur;
62
rlim.rlim_cur= 0; /* Safety if next call fails */
63
(void) getrlimit(RLIMIT_NOFILE,&rlim);
64
if (rlim.rlim_cur) /* If call didn't fail */
65
max_file_limit= (uint32_t) rlim.rlim_cur;
71
68
return(max_file_limit);