ごとうゆうぞうです。

以下のようなスクリプトを動かすと、

  require 'thread'
  require 'socket'

  Thread.start{
    s0, s1 = Socket.socketpair("PF_UNIX", "SOCK_STREAM", 0)
    s1.print("foo")
    a = select([s0, s1])
    p a[0]
  }
  sleep(10)

こうなります。(本当は [#<Socket:0x80faae8>] だけのはず)

  $ ruby -v select.rb 
  ruby 1.6.2 (2000-11-14) [i386-netbsd1.5J]
  [#<Socket:0x80faae8>, #<Socket:0x80faafc>]

intersect_fds(eval.c)で、若い fd をひとつだけ調べて
抜けているのがまずいように思います。

--
ごとうゆうぞう
# ぶちあたるのは stdio だけじゃないみたい;-)