12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package linux
- import (
- "io/ioutil"
- "strconv"
- "strings"
- )
- type NetTCPSockets struct {
- Sockets []NetTCPSocket `json:"sockets"`
- }
- type NetTCPSocket struct {
- NetSocket
- RetransmitTimeout uint64 `json:"retransmit_timeout"`
- PredictedTick uint64 `json:"predicted_tick"`
- AckQuick uint8 `json:"ack_quick"`
- AckPingpong bool `json:"ack_pingpong"`
- SendingCongestionWindow uint64 `json:"sending_congestion_window"`
- SlowStartSizeThreshold int64 `json:"slow_start_size_threshold"`
- }
- func ReadNetTCPSockets(path string, ip NetIPDecoder) (*NetTCPSockets, error) {
- b, err := ioutil.ReadFile(path)
- if err != nil {
- return nil, err
- }
- lines := strings.Split(string(b), "\n")
- tcp := &NetTCPSockets{}
- for i := 1; i < len(lines); i++ {
- line := lines[i]
- f := strings.Fields(line)
- if len(f) < 17 {
- continue
- }
- s, err := parseNetSocket(f, ip)
- if err != nil {
- return nil, err
- }
- var n int64
- e := &NetTCPSocket{
- NetSocket: *s,
- }
- if e.RetransmitTimeout, err = strconv.ParseUint(f[12], 10, 64); err != nil {
- return nil, err
- }
- if e.PredictedTick, err = strconv.ParseUint(f[13], 10, 64); err != nil {
- return nil, err
- }
- if n, err = strconv.ParseInt(f[14], 10, 8); err != nil {
- return nil, err
- }
- e.AckQuick = uint8(n >> 1)
- e.AckPingpong = ((n & 1) == 1)
- if e.SendingCongestionWindow, err = strconv.ParseUint(f[15], 10, 64); err != nil {
- return nil, err
- }
- if e.SlowStartSizeThreshold, err = strconv.ParseInt(f[16], 10, 32); err != nil {
- return nil, err
- }
- tcp.Sockets = append(tcp.Sockets, *e)
- }
- return tcp, nil
- }
|