File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed
Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -378,6 +378,11 @@ impl<Data> ConnectionCommon<Data> {
378378 loop {
379379 let until_handshaked = self . is_handshaking ( ) ;
380380
381+ if !self . wants_write ( ) && !self . wants_read ( ) {
382+ // We will make no further progress.
383+ return Ok ( ( rdlen, wrlen) ) ;
384+ }
385+
381386 while self . wants_write ( ) {
382387 wrlen += self . write_tls ( io) ?;
383388 }
Original file line number Diff line number Diff line change @@ -4976,6 +4976,44 @@ fn test_complete_io_errors_if_close_notify_received_too_early() {
49764976 ) ;
49774977}
49784978
4979+ #[ test]
4980+ fn test_complete_io_with_no_io_needed ( ) {
4981+ let ( mut client, mut server) = make_pair ( KeyType :: Rsa ) ;
4982+ do_handshake ( & mut client, & mut server) ;
4983+ client
4984+ . writer ( )
4985+ . write_all ( b"hello" )
4986+ . unwrap ( ) ;
4987+ client. send_close_notify ( ) ;
4988+ transfer ( & mut client, & mut server) ;
4989+ server. process_new_packets ( ) . unwrap ( ) ;
4990+ server
4991+ . writer ( )
4992+ . write_all ( b"hello" )
4993+ . unwrap ( ) ;
4994+ server. send_close_notify ( ) ;
4995+ transfer ( & mut server, & mut client) ;
4996+ client. process_new_packets ( ) . unwrap ( ) ;
4997+
4998+ // neither want any IO: both directions are closed.
4999+ assert ! ( !client. wants_write( ) ) ;
5000+ assert ! ( !client. wants_read( ) ) ;
5001+ assert ! ( !server. wants_write( ) ) ;
5002+ assert ! ( !server. wants_read( ) ) ;
5003+ assert_eq ! (
5004+ client
5005+ . complete_io( & mut FakeStream ( & [ ] ) )
5006+ . unwrap( ) ,
5007+ ( 0 , 0 )
5008+ ) ;
5009+ assert_eq ! (
5010+ server
5011+ . complete_io( & mut FakeStream ( & [ ] ) )
5012+ . unwrap( ) ,
5013+ ( 0 , 0 )
5014+ ) ;
5015+ }
5016+
49795017struct FakeStream < ' a > ( & ' a [ u8 ] ) ;
49805018
49815019impl < ' a > io:: Read for FakeStream < ' a > {
You can’t perform that action at this time.
0 commit comments