diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-13 22:08:15 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-13 22:08:15 +0300 |
| commit | 8d213f85633d7fc9c3e33825e039c782414e0fb0 (patch) | |
| tree | cd704940055a1b64be29a6f080cbb70a1f85f023 /src/server | |
| parent | a7a1410abb76d8f926ccdf0b36c42e8ce057c555 (diff) | |
fix: clean up failed terminal observer setup (#4071)
refs #3612
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/client_transport.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/client_transport.rs b/src/server/client_transport.rs index da682c06..210a840b 100644 --- a/src/server/client_transport.rs +++ b/src/server/client_transport.rs @@ -1042,10 +1042,17 @@ fn client_read_loop_with_endpoint_controls( ClientMessage::ObserveTerminal { target } => { #[cfg(unix)] { - stream.set_send_timeout(Some(OBSERVER_WRITE_TIMEOUT))?; // macOS Unix sockets can block even with per-send MSG_DONTWAIT. // ClientStreamReader preserves blocking reads on the shared socket. - stream.set_nonblocking(true)?; + let configured = stream + .set_send_timeout(Some(OBSERVER_WRITE_TIMEOUT)) + .and_then(|()| stream.set_nonblocking(true)); + if let Err(err) = configured { + let _ = crate::platform::shutdown_client_stream(&stream); + let _ = server_event_tx + .blocking_send(ServerEvent::ClientDisconnected { client_id }); + return Err(err); + } } ServerEvent::ClientObserveTerminal { client_id, target } } |
