diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-08-13 20:58:11 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-08-13 20:58:11 +0000 |
commit | 4db0c519f51a891cadda08981e9e0f7f2b3f3f81 (patch) | |
tree | c9d8947e3f97ea57f6cf7d6b7215c9837904d9a0 /test | |
parent | 31e1fce2a3a4ba971aed17cf6544d04649ba4dc9 (diff) | |
download | ruby-4db0c519f51a891cadda08981e9e0f7f2b3f3f81.tar.gz |
* test/socket/test_socket.rb (test_connect_timeout): added a test
based on a patch by Eric Wong. [ruby-core:38910]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/socket/test_socket.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/socket/test_socket.rb b/test/socket/test_socket.rb index b3b6fee5ef..dd1e5c87c0 100644 --- a/test/socket/test_socket.rb +++ b/test/socket/test_socket.rb @@ -430,4 +430,32 @@ class TestSocket < Test::Unit::TestCase ensure server.close end + + def test_connect_timeout + host = "127.0.0.1" + server = TCPServer.new(host, 0) + port = server.addr[1] + serv_thread = Thread.new {server.accept} + sock = Socket.tcp(host, port, :connect_timeout => 30) + accepted = serv_thread.value + assert_kind_of TCPSocket, accepted + assert_equal sock, IO.select(nil, [ sock ])[1][0], "not writable" + sock.close + + # some platforms may not timeout when the listener queue overflows, + # but we know Linux does with the default listen backlog of SOMAXCONN for + # TCPServer. + assert_raises(Errno::ETIMEDOUT) do + (Socket::SOMAXCONN*2).times do |i| + sock = Socket.tcp(host, port, :connect_timeout => 0) + assert_equal sock, IO.select(nil, [ sock ])[1][0], + "not writable (#{i})" + sock.close + end + end if RUBY_PLATFORM =~ /linux/ + ensure + server.close + accepted.close if accepted + sock.close if sock && ! sock.closed? + end end if defined?(Socket) |