diff options
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 } } |
