github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/common/fdlimit/fdlimit_freebsd.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:33</date> 10 //</624450073329143808> 11 12 13 //+构建FreeBSD 14 15 package fdlimit 16 17 import "syscall" 18 19 //此文件与fdlimiteux.go基本相同, 20 //但是rlimit字段在freebsd上有int64类型,因此它需要 21 //额外的转换。 22 23 //raise尝试最大化此进程的文件描述符允许量 24 //达到操作系统允许的最大硬限制。 25 func Raise(max uint64) error { 26 //获取当前限制 27 var limit syscall.Rlimit 28 if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 29 return err 30 } 31 //尝试将限额更新为最大限额 32 limit.Cur = limit.Max 33 if limit.Cur > int64(max) { 34 limit.Cur = int64(max) 35 } 36 if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 37 return err 38 } 39 return nil 40 } 41 42 //当前检索允许由此打开的文件描述符数 43 //过程。 44 func Current() (int, error) { 45 var limit syscall.Rlimit 46 if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 47 return 0, err 48 } 49 return int(limit.Cur), nil 50 } 51 52 //最大检索此进程的最大文件描述符数 53 //允许自己请求。 54 func Maximum() (int, error) { 55 var limit syscall.Rlimit 56 if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { 57 return 0, err 58 } 59 return int(limit.Max), nil 60 } 61