From: wakou@... Date: 1999-09-22T08:06:33+09:00 Subject: [ruby-list:16987] Re: mn128.rb & telnet.rb 青山です。 On Sat, 18 Sep 1999 01:57:17 +0900, Shin-ichiro Hara wrote: > 今日は telnet.rb を参考にいろいろやってみたんですが、結局 telnet.rb > で使っている心臓部分のアルゴリズム以上に良いものは出来ませんでした。 Perl の Net::Telnet でもだいたいあのような感じみたいです。異なっていて 少し気になる点としては、sysread の前にはやはり select を使用しているの ですが、プロンプト(サーバーからの送信文字列の終り)の判定には select を 使用していません。 これで大丈夫なのかな、という気はしますが、/prompt$/ と、\z ではなく $ を使用しているという事は、文字列の末尾を得ようとは思っていないのかもし れません。 もう一つは原さんご指摘の preprocess の部分です(ありがとうございました。 大きなバグが取れました。)。ここを置換ではなく、index を使用しています。 結局は substr を使って置換作業自体は行っているので、あまり変わらないか もしれませんが、いつか速度比較等をやってみる価値はありそうです。 > もうちょっと違うインタフェース(パソコン通信ソフトのマクロの様な) > も考えて見たのですが、いまいち。 そうですね。私も少し考えてはみたのですが、やはり現在のような Net::Telnet タイプが無難なようでした。せいぜい、ブロックを渡してリアル タイム出力が出来るようにした程度です。(しかし、これはとても便利だと思っ ています。) > thread も read(n) で読み込んでる途中のスレッドを kill すると、 > バッファ内の文字は消えてしまうみたいで、意外と使いにくい。 そうなんですよね。もう忘れてしまいましたが、せっかく thread が使えるの だから、と、似たような事をしてみたものの、やはり思うようにはいきません でした。 しかし、読み込み中に割り込んでホスト側に緊急データを送れたりすると便利 そうなので、このあたりは考えてみたいとは思います。 > select っていうのは、ソケットに使うとサーバーにパケットが飛ぶの > ですか、、結構重い関数なんですね。 いえ、実はそこまでは詳しい挙動は知りません。ただ、システムのバッファに 何か残っていればホストには確認不要ですが、そうで無い場合にはやはりホス トに問い合わせを行わなければならないと思われますので、少なくともそのよ うな場合にはパケットが飛ぶ事になるのではないかと思います。 > しかし良く考えてみると、Telnet では sysread を使っているので、 > Telnet のインスタンスには read も gets も getc も避けなければ > なりませんね。使えるのは close, closed? ぐらいかなあ。 > > あ、出力系があるか、、、 そうなんですよね。gets や write 等は上書きして提供するなどの必要があり ますから、早めに検討したいとは思います。このあたりと、デバッグ用のメソッ ドが用意できたら 1.00 でしょうか。 (そうか、write は syswrite を使っていないから良いかと思っていたら、 NIFTY への書き込みでたまに止まるのは、これが原因かも。syswrite にすべ きかも。) という事で、write 上書き版を作りました。in.coming に入れて置きましたの で、よろしくお願い致します。 -- 青山 和光 Wakou Aoyama