青山です。
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>