diff --git a/src/libos/src/fs/socket_file.rs b/src/libos/src/fs/socket_file.rs index 97471e94..7c24f927 100644 --- a/src/libos/src/fs/socket_file.rs +++ b/src/libos/src/fs/socket_file.rs @@ -64,20 +64,40 @@ impl File for SocketFile { } } - fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result { - unimplemented!() + fn read_at(&self, _offset: usize, buf: &mut [u8]) -> Result { + self.read(buf) } - fn write_at(&self, offset: usize, buf: &[u8]) -> Result { - unimplemented!() + fn write_at(&self, _offset: usize, buf: &[u8]) -> Result { + self.write(buf) } fn readv(&self, bufs: &mut [&mut [u8]]) -> Result { - unimplemented!() + let mut total_len = 0; + for buf in bufs { + match self.read(buf) { + Ok(len) => { + total_len += len; + } + Err(_) if total_len != 0 => break, + Err(e) => return Err(e.into()), + } + } + Ok(total_len) } fn writev(&self, bufs: &[&[u8]]) -> Result { - unimplemented!() + let mut total_len = 0; + for buf in bufs { + match self.write(buf) { + Ok(len) => { + total_len += len; + } + Err(_) if total_len != 0 => break, + Err(e) => return Err(e.into()), + } + } + Ok(total_len) } fn seek(&self, pos: SeekFrom) -> Result {