From: GOTOU Yuuzou Date: 2001-09-07T09:58:11+09:00 Subject: [ruby-list:31312] Re: net/telnet でホストに接続できない In message <20010906222528.22566.qmail@localhost>, `Wakou Aoyama ' wrote: > > ここでは、"ff fd 27" (IAC DO NEW-ENVIRON) に対して、 > > "ff fc 27" (IAC DONT NEW-ENVIRON) を返すはずなのですが、 > > ばらばらに受け取るとうまく返せていないようです。 > > IAC DO をばらばらに受け取った場合には、その直前の > > > elsif pt = c.rindex(/#{IAC}[^#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]?\z/no) > > buf = preprocess(rest + c[0 ... pt]) > > rest = c[pt .. -1] > > ここが受けたような気がしますが、確認してみます。 そこで保存していますが、 0x00000: 27 ff fd 18 ff fd 1f を受け取った時は、else 節で rest を反映していないように思います。 しかし、良く考えると DO を単独で受け取った場合も、直前の IAC を捨てていますね。 -- ごとうゆうぞう --- lib/net/telnet.rb~ Wed Mar 14 18:22:47 2001 +++ lib/net/telnet.rb Fri Sep 7 09:25:43 2001 @@ -473,13 +473,14 @@ begin c = @sock.sysread(1024 * 1024) @dumplog.log_dump('<', c) if @options.has_key?("Dump_log") + c = rest + c unless rest.empty? if @options["Telnetmode"] if Integer(c.rindex(/#{IAC}#{SE}/no)) < Integer(c.rindex(/#{IAC}#{SB}/no)) - buf = preprocess(rest + c[0 ... c.rindex(/#{IAC}#{SB}/no)]) + buf = preprocess(c[0 ... c.rindex(/#{IAC}#{SB}/no)]) rest = c[c.rindex(/#{IAC}#{SB}/no) .. -1] elsif pt = c.rindex(/#{IAC}[^#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]?\z/no) - buf = preprocess(rest + c[0 ... pt]) + buf = preprocess(c[0 ... pt]) rest = c[pt .. -1] else buf = preprocess(c)