2012年7月10日

[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 <nov@xxxxx>
Key fingerprint = E57F 2482 4074 13BC 3B9A 165B C689 5B16 A620 4657


投稿者 xml-rpc : 2012年7月10日 12:29
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/111312
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。