Gauche:ソケットとcharconv

Gauche:ソケットとcharconv

from kou

wrap-with-input-conversionを使ってバッファリングモード:modestでポートをopenするにはどうしたらいいんだろう.

or

文字コードの違う文字列をソケット越しにreadするにはどうしたらいいんだろう.


リリース0.7現在のデザイン

現在のconversion portは無条件にfull bufferingにしている。 それ以外のモードはあんまり考えていなかった。

ソケットからの読み込みを行うコードで、select(2)で調べてから read(2)するような場合、一般には入力がどこで切れるかわからないので、 read-block等を使ってraw dataを読んだ後でいろいろ処理するような コードを想定していた。

charconvポートを:modestでオープンできるか

ソケットから直にconvertするようなポートを:modestでオープン して、動作するだろうか? ソケットからのreadが不完全な形で 終わっていた場合はどう対応すべきだろうか?

Shiro: 変換できない場合のハンドリングについては機能追加が必要と 考えています。 ただ、ここで言っているのはそれとは別で、1文字先読みしないと変換が確定しない ケースが稀にあることです。入力の最後が本当のEOFなのか、その後にまだ データが来るのかで処理を変えなければなりません。アプリケーションレベル でのパケットの終端は、低レベルの変換ルーチンにはわからないので、 上位のコードが終端を教えてやる必要があります。

kou(2003/07/03 10:09:19 PDT): これは変換中にさらにソケットにパケットが届いた場合のことを想定しているのですか?そうであれば

という感じですかねぇ.私だったら前者の方がいいですね.後者だったら ガンガンパケットが送られてきてたらなかなか返ってこなそうですし.

いや,そういう意味じゃないか.これだとバッファリングしてるもんな. たぶん,conversion port的には次のデータが欲しいのにアプリケーション的には 次のデータは欲しくないとかいう場合か. うーん.こういう場合だったらソケットからread出来なくなった時点での結果 (失敗したら例外を上げる)が欲しいな.conversion portが変に気を回して 次の入力を待ってほしくない.その時点で自分の出来ることだけしてくれればいい.

More ...