diff --git a/net_ip_socket.go b/net_ip_socket.go index ba7d9caa..7701fd9e 100644 --- a/net_ip_socket.go +++ b/net_ip_socket.go @@ -14,10 +14,8 @@ package procfs import ( - "bufio" "encoding/hex" "fmt" - "io" "net" "os" "strconv" @@ -74,49 +72,50 @@ type ( ) func newNetIPSocket(file string) (NetIPSocket, error) { - f, err := os.Open(file) + var netIPSocket NetIPSocket + isUDP := strings.Contains(file, "udp") + content, err := os.ReadFile(file) if err != nil { return nil, err } - defer f.Close() - - var netIPSocket NetIPSocket - isUDP := strings.Contains(file, "udp") + lines := strings.Split(string(content), "\n") + if len(lines) < 1 { + return nil, ErrFileParse + } - lr := io.LimitReader(f, readLimit) - s := bufio.NewScanner(lr) - s.Scan() // skip first line with headers - for s.Scan() { - fields := strings.Fields(s.Text()) + for _, line := range lines[1:] { + fields := strings.Fields(line) + if len(fields) == 0 { + continue + } line, err := parseNetIPSocketLine(fields, isUDP) if err != nil { return nil, err } netIPSocket = append(netIPSocket, line) } - if err := s.Err(); err != nil { - return nil, err - } return netIPSocket, nil } // newNetIPSocketSummary creates a new NetIPSocket{,6} from the contents of the given file. func newNetIPSocketSummary(file string) (*NetIPSocketSummary, error) { - f, err := os.Open(file) - if err != nil { - return nil, err - } - defer f.Close() - var netIPSocketSummary NetIPSocketSummary var udpPacketDrops uint64 isUDP := strings.Contains(file, "udp") + content, err := os.ReadFile(file) + if err != nil { + return nil, err + } + lines := strings.Split(string(content), "\n") + if len(lines) < 1 { + return nil, ErrFileParse + } - lr := io.LimitReader(f, readLimit) - s := bufio.NewScanner(lr) - s.Scan() // skip first line with headers - for s.Scan() { - fields := strings.Fields(s.Text()) + for _, line := range lines[1:] { + fields := strings.Fields(line) + if len(fields) == 0 { + continue + } line, err := parseNetIPSocketLine(fields, isUDP) if err != nil { return nil, err @@ -129,9 +128,6 @@ func newNetIPSocketSummary(file string) (*NetIPSocketSummary, error) { netIPSocketSummary.Drops = &udpPacketDrops } } - if err := s.Err(); err != nil { - return nil, err - } return &netIPSocketSummary, nil }