| 
1 | 1 | #![allow(dead_code)]  | 
2 | 2 | 
 
  | 
3 | 3 | use crate::cmp;  | 
4 |  | -use crate::io::{self, IoSlice, IoSliceMut};  | 
 | 4 | +use crate::io::{self, BorrowedBuf, BorrowedCursor, IoSlice, IoSliceMut};  | 
5 | 5 | use crate::mem;  | 
6 | 6 | use crate::net::{Shutdown, SocketAddr};  | 
7 | 7 | use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, RawFd};  | 
@@ -146,18 +146,35 @@ impl Socket {  | 
146 | 146 |         Ok(Socket(unsafe { FileDesc::from_raw_fd(fd) }))  | 
147 | 147 |     }  | 
148 | 148 | 
 
  | 
149 |  | -    fn recv_with_flags(&self, buf: &mut [u8], flags: i32) -> io::Result<usize> {  | 
150 |  | -        let ret =  | 
151 |  | -            cvt(unsafe { netc::recv(self.0.as_raw_fd(), buf.as_mut_ptr(), buf.len(), flags) })?;  | 
152 |  | -        Ok(ret as usize)  | 
 | 149 | +    fn recv_with_flags(&self, mut buf: BorrowedCursor<'_>, flags: i32) -> io::Result<()> {  | 
 | 150 | +        let ret = cvt(unsafe {  | 
 | 151 | +            netc::recv(  | 
 | 152 | +                self.0.as_raw_fd(),  | 
 | 153 | +                buf.as_mut().as_mut_ptr() as *mut u8,  | 
 | 154 | +                buf.capacity(),  | 
 | 155 | +                flags,  | 
 | 156 | +            )  | 
 | 157 | +        })?;  | 
 | 158 | +        unsafe {  | 
 | 159 | +            buf.advance(ret as usize);  | 
 | 160 | +        }  | 
 | 161 | +        Ok(())  | 
153 | 162 |     }  | 
154 | 163 | 
 
  | 
155 | 164 |     pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> {  | 
156 |  | -        self.recv_with_flags(buf, 0)  | 
 | 165 | +        let mut buf = BorrowedBuf::from(buf);  | 
 | 166 | +        self.recv_with_flags(buf.unfilled(), 0)?;  | 
 | 167 | +        Ok(buf.len())  | 
157 | 168 |     }  | 
158 | 169 | 
 
  | 
159 | 170 |     pub fn peek(&self, buf: &mut [u8]) -> io::Result<usize> {  | 
160 |  | -        self.recv_with_flags(buf, netc::MSG_PEEK)  | 
 | 171 | +        let mut buf = BorrowedBuf::from(buf);  | 
 | 172 | +        self.recv_with_flags(buf.unfilled(), netc::MSG_PEEK)?;  | 
 | 173 | +        Ok(buf.len())  | 
 | 174 | +    }  | 
 | 175 | + | 
 | 176 | +    pub fn read_buf(&self, buf: BorrowedCursor<'_>) -> io::Result<()> {  | 
 | 177 | +        self.recv_with_flags(buf, 0)  | 
161 | 178 |     }  | 
162 | 179 | 
 
  | 
163 | 180 |     pub fn read_vectored(&self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {  | 
 | 
0 commit comments