1//go:build freebsd || openbsd || netbsd || dragonfly
 2
 3package watcher
 4
 5import "syscall"
 6
 7func Ulimit() (uint64, error) {
 8	var currentLimit uint64 = 0
 9	var rLimit syscall.Rlimit
10	err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
11	if err != nil {
12		return 0, err
13	}
14	currentLimit = uint64(rLimit.Cur)
15	rLimit.Cur = rLimit.Max / 10 * 8
16	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
17	if err != nil {
18		return currentLimit, err
19	}
20	err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
21	if err != nil {
22		return currentLimit, err
23	}
24	return uint64(rLimit.Cur), nil
25}