In article <1072187038.323510.16557.nullmailer / picachu.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> @@ -249,2 +249,3 @@ rb_io_check_writable(fptr)
>  #endif
> +    fptr->mode &= ~FMODE_RBUF;
>  }

これについてちょっと考えたのですが、read buffer と write buffer が独立
に存在する場合、つまり socket などで f2 が存在する場合、FMODE_RBUF と
FMODE_WBUF は排他ではなく、クリアするのは変なように思います。

% ruby -rsocket -e 's1, s2 = UNIXSocket.pair
s1.print "a"
p s2.read(1)
s2.print "c"
s2.ungetc ?b
p s2.read(1)
p s1.read(1)
'
"a"
-e:5:in `ungetc': unread stream (IOError)
        from -e:5
-- 
[田中 哲][たなか あきら][Tanaka Akira]