From: Nobuhiro IMAI Date: 2012-07-10T12:29:01+09:00 Subject: [ruby-list:48825] TCPSocket eof? and read いまいです。 以下のようにすると、たまに以下のような結果になるのですが、sysread だけ じゃなく、read と eof? を混ぜるのもまずいんでしょうか? ruby 2.0.0dev (2012-07-10 trunk 36352) [x86_64-linux] require "socket" s = TCPServer.new("localhost", 0) Thread.new do c = s.accept c.write("123456") # c.write("123") # c.write("456") c.close end addr = s.addr c = TCPSocket.new(addr[3], addr[1]) Thread.new(c, &:eof?) c.read(3) # => nil c.read(3) # => "123" サーバ側で "123" と "456" で 2 回 wirte すると、末尾の2行は ["123", "456"] [nil, "123"] ["456", "123"] ["456", nil] [nil, nil] という組み合わせのいずれかになります。 ソケットが切断されたらすぐに再接続の処理を始めるという挙動を実現するの に、eof? でブロックしておいて true が返るか IOError になるのを待つとい うことをしようとしているのですが、何か他にいい方法はあるでしょうか? -- Nobuhiro IMAI Key fingerprint = E57F 2482 4074 13BC 3B9A 165B C689 5B16 A620 4657