なかだです。 At Sun, 12 May 2002 11:52:12 +0900, Nobuyoshi-Nakada wrote: > [ruby-talk:40015]のmswin32でマルチスレッドでselectを使ったとき > に空のArrayが返される件ですが、どうもeval.c:intersect_fds()がう > まく動いてないようです。fd_setの構造の違いのせいなのかまだよく > 分かってませんが、src, dstともにクリアされてしまってます。 ext/socket/socket.cでdup()しているせいでした。myfddup()ではハン ドルは複製せずにディスクリプタだけ複製していますが、Winsockの fd_setはハンドルベースになっているため、オリジナルのほうまでク リアされてしまうようです。1.7ではdup()しなくなっているため発生 しません。これって1.6だとdup()しないとまずいんでしたっけ。 Index: socket.c =================================================================== RCS file: /cvs/ruby/src/ruby/ext/socket/socket.c,v retrieving revision 1.35.2.11 diff -u -2 -p -r1.35.2.11 ext/socket/socket.c --- ext/socket/socket.c 2002/03/25 06:16:02 1.35.2.11 +++ ext/socket/socket.c 2002/05/13 04:07:59 @@ -183,7 +183,4 @@ sock_new(class, fd) #ifdef NT fp->finalize = sock_finalize; - fd = myfddup(fd); -#else - fd = dup(fd); #endif fp->f2 = rb_fdopen(fd, "w"); -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦