From: Joel VanderWerf Date: 2006-02-19T06:48:52+09:00 Subject: Re: Hello, and a question about finding a defined Class from C Jacob Repp wrote: > It's not that simple. For example: > > # server > server = Thread.new { > s = UDPSocket.open > s.bind(nil, 5000) > while(true) > data, cli = s.recvfrom(256) > puts "Server got #{data} from #{cli}" > Thread.pass > end > } > client = Thread.new { > s = UDPSocket.open > s.connect('localhost', 5000) > while(true) > s.send("hello", 0) > Thread.pass > end > } > > The problem occurs on the first call that the sever thread makes to > recvfrom(). This is a blocking call and since ruby is actually a > single threaded process (with virtual soft threads) this hangs all of > the other virtual threads. So for my test app which is trying to run a > simulation thread as well as handle socket and console IO this becomes > a problem quickly. That code works fine for me, using ruby-1.8.4, both linux and windows (the one-click msvc-built version). Also, the Thread.pass is not needed. I did add a line at the end: sleep (You could also use Thread.join(client) or similar.) -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407