feat(client): Validate client state and restore socket timeout on open()
This commit is contained in:
1 parent
1266497119
commit
f8505b01f3
1 file changed
+19
@@ -48,6 +48,25 @@ impl Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn open(&mut self, now: ClientTimestamp) -> Result<OpenOutcome, ClientError> {
|
pub fn open(&mut self, now: ClientTimestamp) -> Result<OpenOutcome, ClientError> {
|
||||||
|
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<OpenOutcome, ClientError> {
|
||||||
validate_open_timeouts(&self.config.open_timeouts)?;
|
validate_open_timeouts(&self.config.open_timeouts)?;
|
||||||
let request = OpenRequest {
|
let request = OpenRequest {
|
||||||
params: self.requested.clone(),
|
params: self.requested.clone(),
|
||||||
|
|||||||
Reference in new issue
Block a user