青山です。

マニュアルにあるサンプルの一部に手を加えたサンプルですが、これに telnet
で接続し、切断すると、Broken pipe で Ruby が終了してしまいます。Ruby
内でこのエラーも捕捉して欲しい(rescue に行って欲しい)ですが、大変でしょ
うか?


#!/usr/local/bin/ruby

require "socket"

gs = TCPserver.open(0)
addr = gs.addr
addr.shift
printf("server is on %d\n", addr.join(":"))

loop do
  ns = gs.accept
  print(ns, " is accepted\n")
  Thread.start do
    s = ns                      # save to dynamic variable
    loop do
      begin
        s.write(".\n") # --> Broken pipe
      rescue
        break
      end
        sleep 0.5
    end
    print(s, " is gone\n")
    s.close
  end
end


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