[#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:7844] Re: socket and buffering

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

matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
> |したがって、sysread以外の入力メソッドを使うと全部 1 byte ずつ
> |read システムコールが発行されてしまうと。
> |stdioを経由で、ブロックせずに読み込むにはそれしかないからだと思い
> |ますけど。
> 
> readも大丈夫でしょう? 内心ではソケットの入力はreadかrecvだ
> よなあと思ってます。問題はどこにも書いた覚えがないことですが。

以下のような環境で調べたところ、Socket#read (中ではfread(3)が呼ば
れる)を使うと、やはり 1 byte づつの read になってしまいます。

Debian/GNU Linxu slink(i386) libc6_2.0.7.19981211 で strace
BSD/OS 3.1 (i386) で ktrace
SunOS 5.6 (sparc) で truss

LinuxとBSDのlibcのソースをざっと見てみました。断定はできませんが、
setbuf() でバファリングをoffにした時点で、その FILE に 1 byte の
バッファが割り当てられ、そのバッファを通して入力を行なっているい
るように見えます。そのため 1 byte づつ read システムコールが発行
されてしまうようです。

---
福嶋正機

In This Thread