青山です。

ruby-1.1b_10 の(07-09 のどれかかも)の socket の動きが変です。

loop do
  sock = port.accept # stand by for accept

  Thread.start do # divide the work
    case http_header_analyze(sock)
    when %r|^/$|                 # ===== new access
      new_access(sock, serial_no, member)
    when %r|^/talk(\d+).html$|   # ===== talk window (post message)
      talk_window(sock, member[$1.to_i], member)
    when %r|^/listen(\d+).html$| # ===== new listen window
      new_listen_window(sock, member[$1.to_i], member)
    else                         # ===== file not found
      sock << add_http_header('<H1>file not found</H1>')
      sock.shutdown(2)
    end
  end
end

こんな感じの物で、talk.html, listen.html が、同じ socket オブジェクト
を扱ってしまいます。つまり、ほとんど同時に要求があった場合、なぜか
accept をすり抜けて次の処理に進んでしまっているようです。

何か心当たりはあるでしょうか? 無ければもう少し調べてみます。


青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>