From a46464deab149387bf4002ff35cf74ce480243a3 Mon Sep 17 00:00:00 2001 From: Theo Bogusta <3322313+theo3@users.noreply.github.com> Date: Tue, 19 Jan 2021 14:28:35 -0500 Subject: [PATCH] Fix vectored IO for TcpStream Implements `Write::poll_write_vectored` and `Read::poll_read_vectored` on `TcpStream` using the vectored IO methods on the underlying stream. Previously, the trait's default implementation was used, which just called `poll_write` and `poll_read` once for each `IoSlice`. --- src/net/tcp/stream.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/net/tcp/stream.rs b/src/net/tcp/stream.rs index 2e14806f..c2a6277b 100644 --- a/src/net/tcp/stream.rs +++ b/src/net/tcp/stream.rs @@ -307,6 +307,14 @@ impl Read for &TcpStream { ) -> Poll> { Pin::new(&mut &*self.watcher).poll_read(cx, buf) } + + fn poll_read_vectored( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + bufs: &mut [IoSliceMut<'_>], + ) -> Poll> { + Pin::new(&mut &*self.watcher).poll_read_vectored(cx, bufs) + } } impl Write for TcpStream { @@ -344,6 +352,14 @@ impl Write for &TcpStream { Pin::new(&mut &*self.watcher).poll_write(cx, buf) } + fn poll_write_vectored( + self: Pin<&mut Self>, + cx: &mut Context<'_>, + bufs: &[IoSlice<'_>], + ) -> Poll> { + Pin::new(&mut &*self.watcher).poll_write_vectored(cx, bufs) + } + fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { Pin::new(&mut &*self.watcher).poll_flush(cx) }