@@ -203,7 +203,7 @@ where
203203
204204 let shared = & self . shared ;
205205 let sockets = & self . sockets ;
206- let transport_features = sockets. read_application ( ) . features ( ) ;
206+ let transport_features = sockets. features ( ) ;
207207
208208 let mut reader = shared. receiver . application_guard (
209209 self . ack_mode ,
@@ -263,28 +263,25 @@ where
263263 _ => { }
264264 }
265265
266- let before_len = reader. recv_buffer . payload_len ( ) ;
267-
268266 let recv = reader. poll_fill_recv_buffer (
269267 cx,
270268 self . sockets . read_application ( ) ,
271269 & self . shared . clock ,
272270 & self . shared . subscriber ,
273271 ) ;
274272
275- match Self :: handle_socket_result ( cx, & mut reader. receiver , & mut self . timer , recv) {
276- Poll :: Ready ( res) => res?,
277- // if we've written at least one byte then return that amount
278- Poll :: Pending if out_buf. written_len ( ) > 0 => break ,
279- Poll :: Pending => return Poll :: Pending ,
280- }
273+ let recv_len =
274+ match Self :: handle_socket_result ( cx, & mut reader. receiver , & mut self . timer , recv) {
275+ Poll :: Ready ( res) => res?,
276+ // if we've written at least one byte then return that amount
277+ Poll :: Pending if out_buf. written_len ( ) > 0 => break ,
278+ Poll :: Pending => return Poll :: Pending ,
279+ } ;
281280
282281 // clear the forced receive after performing it once
283282 force_recv = false ;
284283
285- let after_len = reader. recv_buffer . payload_len ( ) ;
286-
287- if before_len == after_len {
284+ if recv_len == 0 {
288285 if transport_features. is_stream ( ) {
289286 // if we got a 0-length read then the stream was closed - notify the receiver
290287 reader. receiver . on_transport_close ( ) ;
@@ -303,8 +300,8 @@ where
303300 cx : & mut Context ,
304301 receiver : & mut recv:: state:: State ,
305302 timer : & mut Option < Timer > ,
306- res : Poll < io:: Result < ( ) > > ,
307- ) -> Poll < io:: Result < ( ) > > {
303+ res : Poll < io:: Result < usize > > ,
304+ ) -> Poll < io:: Result < usize > > {
308305 if let Poll :: Ready ( res) = res {
309306 return res. into ( ) ;
310307 }
@@ -320,7 +317,8 @@ where
320317 ready ! ( timer. poll_ready( cx) ) ;
321318
322319 // if the timer expired then keep going, even if the recv buffer is empty
323- Ok ( ( ) ) . into ( )
320+ // we return `1` to make the caller think that something was written to the buffer
321+ Ok ( 1 ) . into ( )
324322 } else {
325323 timer. cancel ( ) ;
326324 Poll :: Pending
0 commit comments