| 124 | } |
| 125 | |
| 126 | func (ino *Inode) LogValue() slog.Value { |
| 127 | var state string |
| 128 | var extra []slog.Attr |
| 129 | switch s := ino.state.Load(); s.state { |
| 130 | case StatePassive: |
| 131 | state = "passive" |
| 132 | case StateConnected: |
| 133 | state = "connected" |
| 134 | extra = append(extra, slog.Any("proxy", s.connected.proxy)) |
| 135 | case StateConnecting: |
| 136 | state = "connecting" |
| 137 | extra = append(extra, slog.Any("bind", s.connecting.bind), slog.Any("peer", s.connecting.peer)) |
| 138 | case StateListening: |
| 139 | state = "listening" |
| 140 | extra = append(extra, slog.String("bind", s.listening.lis.Addr().String())) |
| 141 | extra = append(extra, slog.Bool("active", s.listening.active.Load())) |
| 142 | case StateClosed: |
| 143 | state = "closed" |
| 144 | } |
| 145 | |
| 146 | var domain string |
| 147 | switch ino.Domain { |
| 148 | case unix.AF_INET: |
| 149 | domain = "AF_INET" |
| 150 | case unix.AF_INET6: |
| 151 | domain = "AF_INET6" |
| 152 | } |
| 153 | |
| 154 | ino.mu.RLock() |
| 155 | open := len(ino.open) |
| 156 | ino.mu.RUnlock() |
| 157 | |
| 158 | return slog.GroupValue(append([]slog.Attr{ |
| 159 | slog.String("domain", domain), |
| 160 | slog.Uint64("number", ino.Number), |
| 161 | slog.Int("open", open), |
| 162 | slog.String("state", state), |
| 163 | }, extra...)...) |
| 164 | } |
| 165 | |
| 166 | func (ino *Inode) add(sock *Socket) { |
| 167 | ino.mu.Lock() |