Skip to content

Commit 1f4d0d1

Browse files
committed
Refactor io::Read impl for Socket
This changes it to call Socket::recv. On unix this would previously call read(2), but recv(2) without flags should have the same affect. Furthermore this implements io::Read::read_vectored by calling Socket::recv_vectored.
1 parent e49bd3a commit 1f4d0d1

File tree

3 files changed

+12
-33
lines changed

3 files changed

+12
-33
lines changed

src/socket.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -906,13 +906,21 @@ impl Socket {
906906

907907
impl Read for Socket {
908908
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
909-
self.inner().read(buf)
909+
self.recv(buf)
910+
}
911+
912+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
913+
self.recv_vectored(bufs).map(|(n, _)| n)
910914
}
911915
}
912916

913917
impl<'a> Read for &'a Socket {
914918
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
915-
self.inner().read(buf)
919+
self.recv(buf)
920+
}
921+
922+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
923+
self.recv_vectored(bufs).map(|(n, _)| n)
916924
}
917925
}
918926

src/sys/unix.rs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
// except according to those terms.
88

99
use std::cmp::min;
10+
use std::io::Write;
1011
#[cfg(not(target_os = "redox"))]
1112
use std::io::{IoSlice, IoSliceMut};
12-
use std::io::{Read, Write};
1313
use std::mem::{self, size_of, size_of_val, MaybeUninit};
1414
use std::net::Shutdown;
1515
use std::net::{self, Ipv4Addr, Ipv6Addr};
@@ -1027,23 +1027,6 @@ impl Socket {
10271027
}
10281028
}
10291029

1030-
impl Read for Socket {
1031-
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
1032-
<&Socket>::read(&mut &*self, buf)
1033-
}
1034-
}
1035-
1036-
impl<'a> Read for &'a Socket {
1037-
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
1038-
let n = syscall!(read(
1039-
self.fd,
1040-
buf.as_mut_ptr() as *mut c_void,
1041-
cmp::min(buf.len(), max_len()),
1042-
))?;
1043-
Ok(n as usize)
1044-
}
1045-
}
1046-
10471030
impl Write for Socket {
10481031
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
10491032
<&Socket>::write(&mut &*self, buf)

src/sys/windows.rs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use std::cmp::{self, min};
1010
use std::fmt;
1111
use std::io;
12-
use std::io::{IoSlice, IoSliceMut, Read, Write};
12+
use std::io::{IoSlice, IoSliceMut, Write};
1313
use std::mem::{self, size_of, size_of_val, MaybeUninit};
1414
use std::net::Shutdown;
1515
use std::net::{self, Ipv4Addr, Ipv6Addr};
@@ -884,18 +884,6 @@ impl Socket {
884884
}
885885
}
886886

887-
impl Read for Socket {
888-
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
889-
<&Socket>::read(&mut &*self, buf)
890-
}
891-
}
892-
893-
impl<'a> Read for &'a Socket {
894-
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
895-
recv(self.socket, buf, 0)
896-
}
897-
}
898-
899887
impl Write for Socket {
900888
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
901889
<&Socket>::write(&mut &*self, buf)

0 commit comments

Comments
 (0)