You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.0 KiB
52 lines
1.0 KiB
// Copyright (c) 2013-2014 The btcsuite developers |
|
// Use of this source code is governed by an ISC |
|
// license that can be found in the LICENSE file. |
|
|
|
// +build !windows,!plan9 |
|
|
|
package limits |
|
|
|
import ( |
|
"fmt" |
|
"syscall" |
|
) |
|
|
|
const ( |
|
fileLimitWant = 2048 |
|
fileLimitMin = 1024 |
|
) |
|
|
|
// SetLimits raises some process limits to values which allow btcd and |
|
// associated utilities to run. |
|
func SetLimits() error { |
|
var rLimit syscall.Rlimit |
|
|
|
err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit) |
|
if err != nil { |
|
return err |
|
} |
|
if rLimit.Cur > fileLimitWant { |
|
return nil |
|
} |
|
if rLimit.Max < fileLimitMin { |
|
err = fmt.Errorf("need at least %v file descriptors", |
|
fileLimitMin) |
|
return err |
|
} |
|
if rLimit.Max < fileLimitWant { |
|
rLimit.Cur = rLimit.Max |
|
} else { |
|
rLimit.Cur = fileLimitWant |
|
} |
|
err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit) |
|
if err != nil { |
|
// try min value |
|
rLimit.Cur = fileLimitMin |
|
err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit) |
|
if err != nil { |
|
return err |
|
} |
|
} |
|
|
|
return nil |
|
}
|
|
|