diff options
| author | MHSanaei <mc.sanaei@gmail.com> | 2023-02-09 22:18:06 +0300 |
|---|---|---|
| committer | MHSanaei <mc.sanaei@gmail.com> | 2023-02-09 22:18:06 +0300 |
| commit | b73e4173a3c1e69e02ad6b4e3b43e425e57a5be9 (patch) | |
| tree | d95d2f5e903d97082e11eb9f9023c165b1bde388 /util/sys/sys_linux.go | |
3x-ui
Diffstat (limited to 'util/sys/sys_linux.go')
| -rw-r--r-- | util/sys/sys_linux.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/util/sys/sys_linux.go b/util/sys/sys_linux.go new file mode 100644 index 00000000..843d9b00 --- /dev/null +++ b/util/sys/sys_linux.go @@ -0,0 +1,70 @@ +// +build linux + +package sys + +import ( + "bytes" + "fmt" + "io" + "os" +) + +func getLinesNum(filename string) (int, error) { + file, err := os.Open(filename) + if err != nil { + return 0, err + } + defer file.Close() + + sum := 0 + buf := make([]byte, 8192) + for { + n, err := file.Read(buf) + + var buffPosition int + for { + i := bytes.IndexByte(buf[buffPosition:], '\n') + if i < 0 || n == buffPosition { + break + } + buffPosition += i + 1 + sum++ + } + + if err == io.EOF { + return sum, nil + } else if err != nil { + return sum, err + } + } +} + +func GetTCPCount() (int, error) { + root := HostProc() + + tcp4, err := getLinesNum(fmt.Sprintf("%v/net/tcp", root)) + if err != nil { + return tcp4, err + } + tcp6, err := getLinesNum(fmt.Sprintf("%v/net/tcp6", root)) + if err != nil { + return tcp4 + tcp6, nil + } + + return tcp4 + tcp6, nil +} + +func GetUDPCount() (int, error) { + root := HostProc() + + udp4, err := getLinesNum(fmt.Sprintf("%v/net/udp", root)) + if err != nil { + return udp4, err + } + udp6, err := getLinesNum(fmt.Sprintf("%v/net/udp6", root)) + if err != nil { + return udp4 + udp6, nil + } + + return udp4 + udp6, nil +} |
