<document>
<title "s_flush_pipe 履歴">
<chapter "flushed pipeの実装">
<renew "02/09/04">
pipe はUNIX のシェルの起動に使いますが、それ以外の場合は、flushed pipe というストリームを使うことにしました。src/machine/std/stream/s_flush_pipe.c で実装されています。

これは、パイプを通して、データがいつフラッシュされたかをデータの受け手に伝えたいためです。今後、XLoHTTP を実装するために必要になってきます。

方法としては、パイプに書き込むすべてのデータにはその前にデータの長さをヘッダとして付けたパケットにするという方法をとります。このデータ長が-1のものは、ここでフラッシュが呼び出されたことを意味します。
</chapter>
<chapter "単方向から双方向に">
<renew "02/09/23">
機種依存のsrc/machine/std/stream/flush_pipe.c は、かつて単方向だったのを双方向にしました。flush_pipe とは普通のパイプに、データを送信するときに、データ長を付け、パケット化したものです。そのため（負のデータ長）のデータには、様々な意味を付加することが出来ます。

一つ大きな利点は、パイプの片方でフラッシュを発行すると、それがもう一方で認知出来ることです。

その他、fpipeの片方の端にipアドレスを設定するルーチンを作り、もう片方からs_get_socketipにより取り出すことが出来ます。

STREAMをHTTP 上に実装する(XLoHTTP)ためには、クライアントがサーバに接続後、サーバは、そのストリームを、fork したプロセスに渡せなければなりません。そのため、サーバ側では、XLoHTTPで入ってきたものをflush_pipeへリレーする仕組みを実装しています。そして、このflush_pipe の端点をプロセスへ受け渡します。

もし、プロセス間に受け渡しが出来ないSTREAM があり、これの受け渡しを実装したい場合は、この方法があります。
</chapter>
</title>
</document>