Hi bill! I try your example, and well it works little better but it is not what i search.. I try to implemented multiplexed architecture, and the Thread still blocks and it is not acceptable, i even cannot see difference if i remove file descriptor mod line or if i leave it.. btw. i dont know nothing programming native file descriptors. maby i should read it. Now, i would like to get clear answer.. is it possible to implement clean multiplexed socket architecture, like with java.nio?? (yes, i was java programmer before i found ruby on rails :)) Thanks guys, Artsi 2005/12/16, Bill Kelly <billk / cts.com>: > From: "Arto Pastinen" <arto.pastinen / gmail.com> > > > > http://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-talk/158720 > > > > .. sad .. huoh.. > > > > > > Why this blocks? > > > > > > > > a = Thread.new do > > > > s = TCPSocket.new('localhost', 4343) > > > > s.nonblock = true > > > > p s.read # it block's here no matter what i do > > > > end > > > > a.join > > > > > > > > .. and how to make it nonblock? > > > My version of Ruby (1.8.2) doesn't have the #nonblock method. > > So I use: > > @sock.fcntl(Fcntl::F_SETFL, @sock.fcntl(Fcntl::F_GETFL) | Fcntl::O_NONBLOCK) > > Maybe try: > > a = Thread.new do > s = TCPSocket.new('localhost', 4343) > > s.fcntl(Fcntl::F_SETFL, s.fcntl(Fcntl::F_GETFL) | Fcntl::O_NONBLOCK) > print dat while dat = s.recv(65536) > end > > Note that I'm using #recv instead of #read... Maybe this will help? > > > Hope this helps, > > Regards, > > Bill > > > > >