[Gauche-devel-jp] Re: ソケット 入力待ちで停止してしまう

Back to archive index

another_face_another_smile****@yahoo***** another_face_another_smile****@yahoo*****
2006年 8月 20日 (日) 15:02:49 JST


赤木です。

理解でしました。

> これはソケットの問題ではなくてreadの仕様なんです。
> readは文字列を読むだけでなく、それをS式としてパーズしようとします。
> S式が完結するか、明らかなエラーをみつけるまでreadは戻りません。
> 
> ためしにクライアントから「(xyz)」という文字列を送ってみて下さい。
> 今度は改行無しでもreadから返りませんか?
> readは「(xyz)」の最後の括弧を読んだ時点で、開き括弧から始まるS式が
> 終わることがわかるので、改行を読まずにそのまま戻ります。
その通りでした。
すっかり、S式をパースすることを忘れていました。
S式を読むときは port->sexp-list とばかり考えていたもので。

パースできればいいので
xyz<space><改行>
などとやってみても大丈夫でした。

ありがとうございました。

At Sat, 19 Aug 2006 19:16:18 -1000 (HST),
Shiro Kawai wrote:
> 
> From: another_face_another_smile****@yahoo*****
> Subject: [Gauche-devel-jp] ソケット 入力待ちで停止してしまう
> Date: Sun, 20 Aug 2006 08:43:12 +0900
> 
> > > クライアント      サーバ
> > >   stdin ------------> 
> > >         <----------- 無加工で返す
> > > 
> > > それで以下のようなものを作ったのですが
> > > readで停止してしまいます。
> > > 改行を入れて送信すれば停止しないことは分かったのですが
> > > 原因が分かりません。
> 
> これはソケットの問題ではなくてreadの仕様なんです。
> readは文字列を読むだけでなく、それをS式としてパーズしようとします。
> S式が完結するか、明らかなエラーをみつけるまでreadは戻りません。
> 
> ためしにクライアントから「(xyz)」という文字列を送ってみて下さい。
> 今度は改行無しでもreadから返りませんか?
> readは「(xyz)」の最後の括弧を読んだ時点で、開き括弧から始まるS式が
> 終わることがわかるので、改行を読まずにそのまま戻ります。
> 
> しかし、クライアントから送られたのが「xyz」という文字列であった場合、
> readはその次の文字を読まないと、xyz.. で始まるシンボルの名前がまだ
> 続くのか、そこで終わりでxyzというシンボルを返して良いのかがわかりません。
> そのため次の文字を読もうとして待ちに入るのです。
> もし改行が付加されていれば、そこでシンボルが終わることがわかるので
> readは戻ることができます。(その場合、空白文字である改行は捨てられます。
> もしxyzの次に読んだ文字が #\( であった場合は、やはりシンボルがそこで
> 終了しますが、開き括弧文字自体は入力ストリームに残されます)
> 
> > > その他気になる点としては、
> > >  :buffering :none の部分は間違っていないでしょうか?
> 
> 出力ポートについては :buffering :none にするより
> ひとかたまりの情報を書いた時点で (flush out) する方が好ましいです。
> 効率が良いですし、TCPパケットが不必要に分割されずに済みます。
> 
> > >  入力ポートにもなにか設定が必要でしょうか?
> 
> デフォルトで適切なバッファリングモードが設定されているので
> 通常はいじる必要はないです。
> 
> > > それと直接関係ないですが、call-with-client-socket を使った場合に
> > > :buffering :none を設定する方法はあるのでしょうか?
> 
> 渡されたポートpに対して
> 
>  (set! (port-buffering p) :none)
> 
> みたいにしてバッファリングモードを変更できます。
> 
> --shiro
> _______________________________________________
> Gauche-devel-jp mailing list
> Gauch****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp
--------------------------------------
Let's start Yahoo! Auction  -  Free Campaign Now!
http://pr.mail.yahoo.co.jp/auction/



Gauche-devel-jp メーリングリストの案内
Back to archive index