From: Hiroyuki Makito Date: 2000-09-07T14:59:05+09:00 Subject: [ruby-list:24854] win32 Thread 内で accept 牧戸と申します。 VC++でコンパイルした win32版 Ruby ver1.4.4 を使用しています。 NT4.0上で、以下のプログラムを実行すると、fd.each do |line| の行で ブロックしてしまいます。linuxで同じコードを試したところ、ブロック せずうまく動作しました。 どうやら、Thread 内のaccept で接続を待つ状態になると、ファイルIO で不具 合が起きる様子です(accept の前に wait(1) と置くと動作します)。 原因は何が考えられますでしょうか? 回避策はありますでしょうか? ----"test.rb" ここから require "socket" gs = TCPServer::open(0) Thread.start do while true #wait (1) #<-有効にすると動作 ns = gs.accept Thread.start do s = ns while s.gets s.write($_) end print(s, " is gone\n") s.close end end end print "reach this line.\n" fd = open("test.rb","r") fd.each do |line| #<--ここでブロックしてしまう。 print line end print "don't reach this line.\n" while true end ----ここまで ----- Weathernews Inc. 牧戸 浩之 makimaki@wni.co.jp