make socketadapter not require an os error

This commit is contained in:
Daniella / Tove 2023-10-01 17:51:44 +02:00
parent 9b5c37ceb3
commit 6f7f24016e
Signed by: TudbuT
GPG key ID: 7D63D5634B7C417F

View file

@ -10,14 +10,14 @@ use crate::{io_sync, Connection};
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
enum Broken { enum Broken {
OsErr(i32), OsErr(i32),
//DirectErr(ErrorKind), DirectErr(ErrorKind, &'static str),
} }
impl From<Broken> for Error { impl From<Broken> for Error {
fn from(value: Broken) -> Self { fn from(value: Broken) -> Self {
match value { match value {
Broken::OsErr(x) => Error::from_raw_os_error(x), Broken::OsErr(x) => Error::from_raw_os_error(x),
//Broken::DirectErr(x) => Error::from(x), Broken::DirectErr(x, s) => Error::new(x, s),
} }
} }
} }
@ -65,10 +65,14 @@ impl SocketAdapter {
.copy_within(self.written..self.written + self.to_write, 0); .copy_within(self.written..self.written + self.to_write, 0);
self.written = 0; self.written = 0;
} }
let Some(x) = self.write.get_mut(self.to_write + self.written..self.to_write + self.written + buf.len()) else { let Some(x) = self
.write
.get_mut(self.to_write + self.written..self.to_write + self.written + buf.len())
else {
let sa = SystemTime::now(); let sa = SystemTime::now();
self.internal.set_nonblocking(false)?; self.internal.set_nonblocking(false)?;
self.internal.write_all(&self.write[self.written..self.written + self.to_write])?; self.internal
.write_all(&self.write[self.written..self.written + self.to_write])?;
self.internal.set_nonblocking(self.is_nonblocking)?; self.internal.set_nonblocking(self.is_nonblocking)?;
self.written = 0; self.written = 0;
self.to_write = buf.len(); self.to_write = buf.len();
@ -114,7 +118,7 @@ impl SocketAdapter {
} }
Err(x) if x.kind() == ErrorKind::WouldBlock => Ok(()), Err(x) if x.kind() == ErrorKind::WouldBlock => Ok(()),
Err(x) => { Err(x) => {
self.broken = Some(Broken::OsErr(x.raw_os_error().unwrap())); self.broken = Some(Broken::DirectErr(x.kind(), "io error"));
Err(x) Err(x)
} }
} }