[#7785] rb2c — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

28 messages 1999/09/02

[#7845] [Q] irb and SizedQueue — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

14 messages 1999/09/15

[ruby-dev:7858] Re: socket and buffering

From: Masaki Fukushima <fukusima@...>
Date: 1999-09-17 02:54:14 UTC
List: ruby-dev #7858
福嶋です。

matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
> |以下のような環境で調べたところ、Socket#read (中ではfread(3)が呼ば
> |れる)を使うと、やはり 1 byte づつの read になってしまいます。
> 
> うーむ、そうですか。
> 
> どうやって回避するのがベストなんでしょうねえ。
> O_NDELAY+read(2)しかないのか..

ちょっと整理してみましょう。

問題になっているのはunbufferedなIOオブジェクト(主にSocket)か
らの読み込みが、sysread以外のメソッドで1byteずつのread(2)になって
しまうことです。

まず改善の方針として

 1. IO#readで改善されれば良い。
 2. 他のメソッド(IO#getsなど)でも改善したい。

があります。

IO#readだけ改善されれば良いのならば、fread(3)を使っている部分を
、unbufferedな場合に限りrb_thread_wait_fd()+read(2)で置き換えると
いう方法が一番楽でしょうか。

元々stdioでバッファリングをoffにしているので、stdioをバイパスして
も問題は無いでしょう。

IO#read以外も改善しようとすると、結構大変ですね。何byte読み込めば
いいのか事前に分からないので、1byteずつread(2)する以外だと、結局
バッファリングするしか無いですし。

その場合はunbufferedにしないでO_NDELAYを使うという方法でしょうか。

---
福嶋正機

In This Thread