diff options
author | Andrew Aladjev <aladjev.andrew@gmail.com> | 2021-02-23 23:18:08 +0300 |
---|---|---|
committer | U.Nakamura <usa@ruby-lang.org> | 2021-11-24 17:42:52 +0900 |
commit | f180f4607cd129a4fe8d1ed671bb7d39d71dda97 (patch) | |
tree | 78a34e40e470288a3425f1ffe213f001a28acdd0 /test | |
parent | 5bd0c0a014d3cb1e07b355208dbfd2352f8dc08c (diff) |
Backport mutexes for socket and connection lists on win32 #4212
Diffstat (limited to 'test')
-rw-r--r-- | test/socket/test_tcp.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb index 11325fdedb..7962cbe959 100644 --- a/test/socket/test_tcp.rb +++ b/test/socket/test_tcp.rb @@ -95,4 +95,29 @@ class TestSocket_TCPSocket < Test::Unit::TestCase assert_raise(IO::WaitReadable) { svr.accept_nonblock(exception: true) } } end + + def test_accept_multithread + attempts_count = 5 + server_threads_count = 3 + client_threads_count = 3 + + attempts_count.times do + server_threads = Array.new(server_threads_count) do + Thread.new do + TCPServer.open("localhost", 0) do |server| + accept_threads = Array.new(client_threads_count) do + Thread.new { server.accept.close } + end + client_threads = Array.new(client_threads_count) do + Thread.new { TCPSocket.open(server.addr[3], server.addr[1]) } + end + client_threads.each(&:join) + accept_threads.each(&:join) + end + end + end + + server_threads.each(&:join) + end + end end if defined?(TCPSocket) |