11use 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 ) ]
279280pub 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
401402impl 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