mirror of
https://github.com/go-gost/x.git
synced 2026-10-19 16:16:32 +00:00
Stopping a service closes its listener, and a closed listener answers Accept with core's listener.ErrClosed — which the guard never matched (it knew only net.ErrClosed), so every stop reached the log at error level and read like a crash. The tun handler logged the same shape a second time: its client wrapped a closed device with %s, throwing the cause away, so the caller could not tell a device closed under the reader from a real read failure. %w keeps the chain and the handler logs the closed case at debug.