37 lines
803 B
Ruby
37 lines
803 B
Ruby
![]() |
#!/usr/bin/env ruby
|
||
|
|
||
|
# Connect to the destination, then hang. Connect a second time to the
|
||
|
# destinatioin. This will trigger the destination's thread clearer.
|
||
|
|
||
|
require 'socket'
|
||
|
require 'timeout'
|
||
|
|
||
|
addr, port = *ARGV
|
||
|
|
||
|
# client_sock1 is a connection the destination is expecting.
|
||
|
client_sock1 = nil
|
||
|
begin
|
||
|
Timeout.timeout(2) do
|
||
|
client_sock1 = TCPSocket.open( addr, port )
|
||
|
end
|
||
|
rescue Timeout::Error
|
||
|
$stderr.puts "Timed out connecting."
|
||
|
exit 1
|
||
|
end
|
||
|
|
||
|
#client_sock2 is the interloper.
|
||
|
client_sock2 = nil
|
||
|
begin
|
||
|
Timeout.timeout(2) do
|
||
|
client_sock2 = TCPSocket.open( addr, port )
|
||
|
end
|
||
|
rescue Timeout::Error
|
||
|
$stderr.puts "Timed out connecting a second time."
|
||
|
exit 1
|
||
|
end
|
||
|
|
||
|
# This is the expected source crashing after connect
|
||
|
client_sock1.close
|
||
|
# And this is just a tidy-up.
|
||
|
client_sock2.close
|