From f8505b01f39e1bb78fd46c1ffb9d274c270fa061 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Tue, 28 Apr 2026 16:42:06 +0700 Subject: [PATCH] feat(client): Validate client state and restore socket timeout on open() --- crates/irtt-client/src/client.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/crates/irtt-client/src/client.rs b/crates/irtt-client/src/client.rs index 437c1ce..ec00391 100644 --- a/crates/irtt-client/src/client.rs +++ b/crates/irtt-client/src/client.rs @@ -48,6 +48,25 @@ impl Client { } pub fn open(&mut self, now: ClientTimestamp) -> Result { + match self.state { + ClientState::Connected => {} + ClientState::Open { .. } => return Err(ClientError::AlreadyOpen), + ClientState::Closed => return Err(ClientError::AlreadyClosed), + ClientState::NoTestCompleted => return Err(ClientError::AlreadyCompleted), + } + + let outcome = self.open_inner(now); + let restore = self + .socket + .set_read_timeout(self.config.socket_config.recv_timeout); + match (outcome, restore) { + (Ok(outcome), Ok(())) => Ok(outcome), + (Err(err), Ok(())) => Err(err), + (_, Err(err)) => Err(ClientError::Socket(err)), + } + } + + fn open_inner(&mut self, now: ClientTimestamp) -> Result { validate_open_timeouts(&self.config.open_timeouts)?; let request = OpenRequest { params: self.requested.clone(),