// +build freebsd darwin package net import ( "strings" "github.com/shirou/gopsutil/internal/common" ) // Return a list of network connections opened. func Connections(kind string) ([]ConnectionStat, error) { return ConnectionsPid(kind, 0) } // Return a list of network connections opened by a process. func ConnectionsPid(kind string, pid int32) ([]ConnectionStat, error) { var ret []ConnectionStat args := []string{"-i"} switch strings.ToLower(kind) { default: fallthrough case "": fallthrough case "all": fallthrough case "inet": args = append(args, "tcp", "-i", "udp") case "inet4": args = append(args, "4") case "inet6": args = append(args, "6") case "tcp": args = append(args, "tcp") case "tcp4": args = append(args, "4tcp") case "tcp6": args = append(args, "6tcp") case "udp": args = append(args, "udp") case "udp4": args = append(args, "6udp") case "udp6": args = append(args, "6udp") case "unix": return ret, common.ErrNotImplementedError } r, err := common.CallLsof(invoke, pid, args...) if err != nil { return nil, err } for _, rr := range r { if strings.HasPrefix(rr, "COMMAND") { continue } n, err := parseNetLine(rr) if err != nil { continue } ret = append(ret, n) } return ret, nil }