File tree Expand file tree Collapse file tree 2 files changed +19
-7
lines changed Expand file tree Collapse file tree 2 files changed +19
-7
lines changed Original file line number Diff line number Diff line change @@ -117,12 +117,16 @@ impl AsyncRead for IncomingBody {
117
117
Reactor :: current ( ) . wait_for ( pollable) . await ;
118
118
119
119
// Read the bytes from the body stream
120
- let buf = self . body_stream . read ( CHUNK_SIZE ) . map_err ( |err| match err {
121
- StreamError :: LastOperationFailed ( err) => {
122
- std:: io:: Error :: other ( format ! ( "{}" , err. to_debug_string( ) ) )
120
+ let buf = match self . body_stream . read ( CHUNK_SIZE ) {
121
+ Ok ( buf) => buf,
122
+ Err ( StreamError :: Closed ) => return Ok ( 0 ) ,
123
+ Err ( StreamError :: LastOperationFailed ( err) ) => {
124
+ return Err ( std:: io:: Error :: other ( format ! (
125
+ "last operation failed: {}" ,
126
+ err. to_debug_string( )
127
+ ) ) )
123
128
}
124
- StreamError :: Closed => std:: io:: Error :: other ( "Connection closed" ) ,
125
- } ) ?;
129
+ } ;
126
130
self . buf . insert ( buf)
127
131
}
128
132
} ;
Original file line number Diff line number Diff line change @@ -31,7 +31,11 @@ impl TcpStream {
31
31
impl AsyncRead for TcpStream {
32
32
async fn read ( & mut self , buf : & mut [ u8 ] ) -> io:: Result < usize > {
33
33
Reactor :: current ( ) . wait_for ( self . input . subscribe ( ) ) . await ;
34
- let slice = self . input . read ( buf. len ( ) as u64 ) . map_err ( to_io_err) ?;
34
+ let slice = match self . input . read ( buf. len ( ) as u64 ) {
35
+ Ok ( slice) => slice,
36
+ Err ( StreamError :: Closed ) => return Ok ( 0 ) ,
37
+ Err ( e) => return Err ( to_io_err ( e) ) ,
38
+ } ;
35
39
let bytes_read = slice. len ( ) ;
36
40
buf[ ..bytes_read] . clone_from_slice ( & slice) ;
37
41
Ok ( bytes_read)
@@ -41,7 +45,11 @@ impl AsyncRead for TcpStream {
41
45
impl AsyncRead for & TcpStream {
42
46
async fn read ( & mut self , buf : & mut [ u8 ] ) -> io:: Result < usize > {
43
47
Reactor :: current ( ) . wait_for ( self . input . subscribe ( ) ) . await ;
44
- let slice = self . input . read ( buf. len ( ) as u64 ) . map_err ( to_io_err) ?;
48
+ let slice = match self . input . read ( buf. len ( ) as u64 ) {
49
+ Ok ( slice) => slice,
50
+ Err ( StreamError :: Closed ) => return Ok ( 0 ) ,
51
+ Err ( e) => return Err ( to_io_err ( e) ) ,
52
+ } ;
45
53
let bytes_read = slice. len ( ) ;
46
54
buf[ ..bytes_read] . clone_from_slice ( & slice) ;
47
55
Ok ( bytes_read)
You can’t perform that action at this time.
0 commit comments