37 lines
740 B
Go
37 lines
740 B
Go
// +build freebsd
|
|
|
|
package ulimit
|
|
|
|
import (
|
|
"errors"
|
|
"math"
|
|
|
|
unix "golang.org/x/sys/unix"
|
|
)
|
|
|
|
func init() {
|
|
supportsFDManagement = true
|
|
getLimit = freebsdGetLimit
|
|
setLimit = freebsdSetLimit
|
|
}
|
|
|
|
func freebsdGetLimit() (uint64, uint64, error) {
|
|
rlimit := unix.Rlimit{}
|
|
err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit)
|
|
if (rlimit.Cur < 0) || (rlimit.Max < 0) {
|
|
return 0, 0, errors.New("invalid rlimits")
|
|
}
|
|
return uint64(rlimit.Cur), uint64(rlimit.Max), err
|
|
}
|
|
|
|
func freebsdSetLimit(soft uint64, max uint64) error {
|
|
if (soft > math.MaxInt64) || (max > math.MaxInt64) {
|
|
return errors.New("invalid rlimits")
|
|
}
|
|
rlimit := unix.Rlimit{
|
|
Cur: int64(soft),
|
|
Max: int64(max),
|
|
}
|
|
return unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit)
|
|
}
|