@@ -19,11 +19,24 @@ use crate::split::{ReadHalf, WriteHalf};
1919pub struct Stream < IO , C > {
2020 pub ( crate ) io : IO ,
2121 pub ( crate ) session : C ,
22+ #[ cfg( not( feature = "unsafe_io" ) ) ]
23+ r_buffer : crate :: safe_io:: SafeRead ,
24+ #[ cfg( not( feature = "unsafe_io" ) ) ]
25+ w_buffer : crate :: safe_io:: SafeWrite ,
26+ #[ cfg( feature = "unsafe_io" ) ]
27+ r_buffer : crate :: unsafe_io:: UnsafeRead ,
28+ #[ cfg( feature = "unsafe_io" ) ]
29+ w_buffer : crate :: unsafe_io:: UnsafeWrite ,
2230}
2331
2432impl < IO , C > Stream < IO , C > {
2533 pub fn new ( io : IO , session : C ) -> Self {
26- Self { io, session }
34+ Self {
35+ io,
36+ session,
37+ r_buffer : Default :: default ( ) ,
38+ w_buffer : Default :: default ( ) ,
39+ }
2740 }
2841
2942 pub fn split ( self ) -> ( ReadHalf < IO , C > , WriteHalf < IO , C > ) {
@@ -46,20 +59,15 @@ where
4659 C : DerefMut + Deref < Target = ConnectionCommon < SD > > ,
4760{
4861 pub ( crate ) async fn read_io ( & mut self , splitted : bool ) -> io:: Result < usize > {
49- #[ cfg( feature = "unsafe_io" ) ]
50- let mut reader = crate :: unsafe_io:: UnsafeRead :: default ( ) ;
51- #[ cfg( not( feature = "unsafe_io" ) ) ]
52- let mut reader = crate :: safe_io:: SafeRead :: default ( ) ;
53-
5462 let n = loop {
55- match self . session . read_tls ( & mut reader ) {
63+ match self . session . read_tls ( & mut self . r_buffer ) {
5664 Ok ( n) => {
5765 break n;
5866 }
5967 Err ( ref err) if err. kind ( ) == io:: ErrorKind :: WouldBlock => {
6068 #[ allow( unused_unsafe) ]
6169 unsafe {
62- reader . do_io ( & mut self . io ) . await ?
70+ self . r_buffer . do_io ( & mut self . io ) . await ?
6371 } ;
6472 continue ;
6573 }
@@ -92,20 +100,15 @@ where
92100 }
93101
94102 pub ( crate ) async fn write_io ( & mut self ) -> io:: Result < usize > {
95- #[ cfg( feature = "unsafe_io" ) ]
96- let mut writer = crate :: unsafe_io:: UnsafeWrite :: default ( ) ;
97- #[ cfg( not( feature = "unsafe_io" ) ) ]
98- let mut writer = crate :: safe_io:: SafeWrite :: default ( ) ;
99-
100103 let n = loop {
101- match self . session . write_tls ( & mut writer ) {
104+ match self . session . write_tls ( & mut self . w_buffer ) {
102105 Ok ( n) => {
103106 break n;
104107 }
105108 Err ( ref err) if err. kind ( ) == io:: ErrorKind :: WouldBlock => {
106109 #[ allow( unused_unsafe) ]
107110 unsafe {
108- writer . do_io ( & mut self . io ) . await ?
111+ self . w_buffer . do_io ( & mut self . io ) . await ?
109112 } ;
110113 continue ;
111114 }
@@ -114,7 +117,7 @@ where
114117 } ;
115118 // Flush buffered data, only needed for safe_io.
116119 #[ cfg( not( feature = "unsafe_io" ) ) ]
117- writer . do_io ( & mut self . io ) . await ?;
120+ self . w_buffer . do_io ( & mut self . io ) . await ?;
118121
119122 Ok ( n)
120123 }
0 commit comments