|
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