こんにちは、なかむら(う)です。

ふと思い出したのですが、[ruby-list::40320]からのスレッドで提
示されているnet/telnet.rbの件についてです。

大雑把に話をまとめると、Windows2000付属のtelnetサーバが、なぜ
か\x00をいっぱいとりまぜて送ってくる(別にUnicodeというわけで
はない)ということらしいので、telnetサーバが悪い、で終わりにし
ちゃってもいいかもしれないですが、よく考えると、perlとRubyだ
け問題があるにしても、他のtelnetクライアントで問題が出ている
という話はついぞ聞いたことがありません。

そこで、RFC854(古いかも)を読んでみると、
         NULL (NUL)              0      No Operation
と明記されています。
で、ASCIIモードではCRの直後には必ずLFかNULを送れ、とは明記さ
れているものの、受信時にNULを意味のある文字として拾えという記
述は存在しないように思えます。

と、いうことは、net/telnet.rbのあるべき挙動としては、受信時は
全てのNULを捨てるべきであるように思うのですが、いかがなもんで
しょうか?

そう思っていろいろ調べてみると、少なくともpythonのtelnetライ
ブラリはそうしているようです。
# perlのは、問題が出ていると言われる通り、Rubyと同じでした ^^;

結論としては、こういうことでどうでしょうか?

Index: lib/net/telnet.rb =================================================================== RCS file: /home/cvs/ruby/lib/net/telnet.rb,v retrieving revision 1.27 diff -u -1 -p -r1.27 telnet.rb --- lib/net/telnet.rb 13 May 2004 07:02:18 -0000 1.27 +++ lib/net/telnet.rb 28 Dec 2004 05:59:20 -0000 @@ -440,2 +440,5 @@ module Net + # remove NULL + string = string.gsub(/#{NULL}/no, '') unless @options["Binmode"] + string.gsub(/#{IAC}(
それでは。 -- U.Nakamura <usa / garbagecollect.jp>