@@ -822,4 +822,63 @@ def test_multiple_servers_with_timeout_and_truncated_tcp_fallback
822822 end
823823 end
824824 end
825+
826+ def test_tcp_connection_closed_before_length
827+ with_tcp ( '127.0.0.1' , 0 ) do |t |
828+ _ , server_port , _ , server_address = t . addr
829+
830+ server_thread = Thread . new do
831+ ct = t . accept
832+ ct . recv ( 512 )
833+ ct . close
834+ end
835+
836+ client_thread = Thread . new do
837+ requester = Resolv ::DNS ::Requester ::TCP . new ( server_address , server_port )
838+ begin
839+ msg = Resolv ::DNS ::Message . new
840+ msg . add_question ( 'example.org' , Resolv ::DNS ::Resource ::IN ::A )
841+ sender = requester . sender ( msg , msg )
842+ assert_raise ( Resolv ::ResolvTimeout ) do
843+ requester . request ( sender , 2 )
844+ end
845+ ensure
846+ requester . close
847+ end
848+ end
849+
850+ server_thread . join
851+ client_thread . join
852+ end
853+ end
854+
855+ def test_tcp_connection_closed_after_length
856+ with_tcp ( '127.0.0.1' , 0 ) do |t |
857+ _ , server_port , _ , server_address = t . addr
858+
859+ server_thread = Thread . new do
860+ ct = t . accept
861+ ct . recv ( 512 )
862+ ct . send ( [ 100 ] . pack ( 'n' ) , 0 )
863+ ct . close
864+ end
865+
866+ client_thread = Thread . new do
867+ requester = Resolv ::DNS ::Requester ::TCP . new ( server_address , server_port )
868+ begin
869+ msg = Resolv ::DNS ::Message . new
870+ msg . add_question ( 'example.org' , Resolv ::DNS ::Resource ::IN ::A )
871+ sender = requester . sender ( msg , msg )
872+ assert_raise ( Resolv ::ResolvTimeout ) do
873+ requester . request ( sender , 2 )
874+ end
875+ ensure
876+ requester . close
877+ end
878+ end
879+
880+ server_thread . join
881+ client_thread . join
882+ end
883+ end
825884end
0 commit comments