mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-22 16:02:24 +00:00
`ForwardEntry.status` was written once when the forward was set up and never touched again, so a local or dynamic forward went on reporting `Listening` after its accept loop had already exited. The pane outlives a dead SSH transport on purpose, the daemon keeps it while a subscriber is attached, and the panel re-polls every 2s — so the stale `Listening` is not a blink but the permanent answer. `nc` to the port gets accepted once and refused thereafter while the panel still shows it as live. The status is now an `Arc<Mutex<ForwardStatus>>` shared with the task, and both break arms record why they left: the listening socket closed, or the SSH connection went away. `ForwardStatus::Error` carries it rather than a new variant, because the enum crosses the protocol to `tty7-server` builds that would not know one. `find_auto_local` reads the live status too, so a loopback link is no longer reused after its forward has stopped serving. A remote forward has no accept loop of its own — the far end opens the channels — so it keeps whatever the `tcpip-forward` request answered.