Skip to content

Commit a8b3af8

Browse files
authored
Merge pull request #21 from rustaceanrob/10-9-buf
Prefer `BufReader` in connections
2 parents 44fbf6a + 2b61e97 commit a8b3af8

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/net.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{
22
fmt::Display,
3-
io::{self, Read, Write},
3+
io::{self, BufRead, BufReader, Write},
44
net::{SocketAddr, TcpListener, TcpStream},
55
sync::{
66
mpsc::{self, SendError},
@@ -95,15 +95,17 @@ impl ConnectionExt for ConnectionConfig {
9595
let mut write_half = WriteTransport::V1(self.network().default_network_magic());
9696
let mut read_half = ReadTransport::V1(self.network().default_network_magic());
9797
write_half.write_message(NetworkMessage::Version(version), &mut tcp_stream)?;
98-
let (mut handshake, messages) = match read_half.read_message(&mut tcp_stream)? {
98+
let tcp_stream_clone = tcp_stream.try_clone()?;
99+
let mut buf_reader = BufReader::new(tcp_stream_clone);
100+
let (mut handshake, messages) = match read_half.read_message(&mut buf_reader)? {
99101
Some(message) => self.start_handshake(unix_time, message, nonce)?,
100102
None => return Err(Error::MissingVersion),
101103
};
102104
for message in messages {
103105
write_half.write_message(message, &mut tcp_stream)?;
104106
}
105107
loop {
106-
if let Some(message) = read_half.read_message(&mut tcp_stream)? {
108+
if let Some(message) = read_half.read_message(&mut buf_reader)? {
107109
match handshake.negotiate(message)? {
108110
Some((completed_handshake, responses)) => {
109111
for response in responses {
@@ -127,9 +129,8 @@ impl ConnectionExt for ConnectionConfig {
127129
outbound_ping_state: Arc::clone(&outbound_ping),
128130
};
129131
let (tx, rx) = mpsc::channel();
130-
let tcp_stream_clone = tcp_stream.try_clone()?;
131132
let open_writer = OpenWriter {
132-
tcp_stream: tcp_stream_clone,
133+
tcp_stream,
133134
transport: write_half,
134135
receiver: rx,
135136
outbound_ping_state: Arc::clone(&outbound_ping),
@@ -142,7 +143,7 @@ impl ConnectionExt for ConnectionConfig {
142143
task_handle: write_handle,
143144
};
144145
let reader = ConnectionReader {
145-
tcp_stream,
146+
tcp_stream: buf_reader,
146147
transport: read_half,
147148
their_preferences: Arc::clone(&arc_pref),
148149
timed_messages,
@@ -277,7 +278,7 @@ impl OpenWriter {
277278
/// Read messages from an open connection.
278279
#[derive(Debug)]
279280
pub struct ConnectionReader {
280-
tcp_stream: TcpStream,
281+
tcp_stream: BufReader<TcpStream>,
281282
transport: ReadTransport,
282283
their_preferences: Arc<Mutex<Preferences>>,
283284
timed_messages: Arc<Mutex<TimedMessages>>,
@@ -399,7 +400,10 @@ enum ReadTransport {
399400
}
400401

401402
impl ReadTransport {
402-
fn read_message<R: Read>(&mut self, reader: &mut R) -> Result<Option<NetworkMessage>, Error> {
403+
fn read_message<R: BufRead>(
404+
&mut self,
405+
reader: &mut R,
406+
) -> Result<Option<NetworkMessage>, Error> {
403407
match self {
404408
ReadTransport::V1(magic) => {
405409
let mut message_buf = vec![0; 24];

0 commit comments

Comments
 (0)