[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24095] Re: duplex I/O for tty

From: Tanaka Akira <akr@...17n.org>
Date: 2004-08-17 02:23:39 UTC
List: ruby-dev #24095
In article <20040816190928.524389c9.tommy@tmtm.org>,
  とみたまさひろ <tommy@tmtm.org> writes:

> C でも同じような現象になるので、Ruby じゃなくて stdio の問題のように思
> います。

Ruby のソケットでも、ソケットから取り出した file descriptor を
IO.for_fd で IO オブジェクトにした上で使うと、同様な挙動を示します。

% ruby -rsocket -v -e '
sock1, sock2 = UNIXSocket.pair
sock2 << "aaaaaaazbbbbbbbbbbbb\n"
io = IO.for_fd(sock1.fileno)
p io.gets("z")
io.puts "y"
p io.gets
'
ruby 1.9.0 (2004-08-14) [i686-linux]
"aaaaaaaz"
nil

しかし、IO.for_fd を使わず、ソケットのオブジェクトをそのまま使うと意図
された動作になります。

% ruby -rsocket -v -e '
sock1, sock2 = UNIXSocket.pair
sock2 << "aaaaaaazbbbbbbbbbbbb\n"
io = sock1   
p io.gets("z")
io.puts "y"
p io.gets
'
ruby 1.9.0 (2004-08-14) [i686-linux]
"aaaaaaaz"
"bbbbbbbbbbbb\n"

> /dev/tty のようなデバイスファイルを扱う場合は、stdio は使うなってこと
> かもしれません。

この問題が stdio を使わないことによってしか解決できないとしたら、ソケッ
トは stdio を使っていないのでしょうか?
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread