master
go 28 lines 569 Bytes
Raw
1 // Unix ulimit handling via getrlimit/setrlimit.
2 //go:build darwin || linux || netbsd || openbsd
3
4 package util
5
6 import (
7 unix "golang.org/x/sys/unix"
8 )
9
10 func init() {
11 supportsFDManagement = true
12 getLimit = unixGetLimit
13 setLimit = unixSetLimit
14 }
15
16 func unixGetLimit() (uint64, uint64, error) {
17 rlimit := unix.Rlimit{}
18 err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit)
19 return rlimit.Cur, rlimit.Max, err
20 }
21
22 func unixSetLimit(soft uint64, max uint64) error {
23 rlimit := unix.Rlimit{
24 Cur: soft,
25 Max: max,
26 }
27 return unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit)
28 }