[mew-dist 24205] Re: ssh is not dead even with mew-ssh-keep-connection set to nil

Shun-ichi GOTO gotoh at example.com
2003年 11月 19日 (水) 16:10:40 JST


さっきヘンなメールを送ってしまいました。
ごめんなさい

>>>>> at Wed, 19 Nov 2003 15:01:49 +0900 (JST),
>>>>> Katsuhiro Kondou <kondou at example.com> said,

> } もし、ログイン直後に exit しても刺さってしまう状態だと、.cshrc/.login
> } の類に、なんか問題あるのかもしれません。いったん mv してみるとか、試し
> } てみるといいのかもしれません。
> 
> login 直後の exit は問題無く終了します。mew に限った話で
> はないのですが、port forward を使うと exit しても終了し
> ないケースに時々遭遇します。

これは、Emacs 上からではなく、shell からport-forwarding 付きでssh を使用
している場合にも起きる、ということでしょうか?
それであればEmacs / Mew 側の問題の可能性はかなり減ります。


> mew の問題では無いのですが、みなさんあまりそういう状況に
> なっていないとすれば他に思い当たるところもないので、対処
> 療法として "~." を個人的に使用することにします。

しばらく放っておいた時はexit が成功する、というのは、
POP のtimeout によるものかも知れませんね。
ちなみに先方のpop server はナニでしょうか?

あと、Mew がport-forwarding を利用している間は M-x list-processes
すると以下のようなsession が存在していることがわかるはずですが、
件の症状が発生している時はどうでしょうか?

> Proc         Status   Buffer         Tty         Command
> ----         ------   ------         ---         -------
> test	     open     d		     (none)	 (network stream connection to localhost)

またその状態で
(process-send-eof (get-buffer-process "xxxx"))
するとセッションは切れるのではないかと思いますが、どうでしょう?

netstat の内容を見る限り、pop server 側はCloseしたが、Emacs 側がclose し
ていない状況のような気がするわけですが、手元のssh -vv で確認してみると、
forwarding している direct-tcpip セッションは以下のようなやりとりがなされ、
るのですが、どのような出力になるのかでわかるかも知れません。
## 以下は forwarding している local:110 に対してEmacs からopen-network-stream
## し、後にQUIT\n を送ってセッションが終了するまでのssh -vv の出力です。

debug1: Connection to port 110 forwarding to localhost port 110 requested.
debug2: fd 9 setting TCP_NODELAY
debug2: fd 9 setting O_NONBLOCK
debug2: fd 9 is O_NONBLOCK
debug1: channel 2: new [direct-tcpip]
debug2: channel 2: open confirm rwindow 131072 rmax 32768
debug2: channel 2: rcvd eof
debug2: channel 2: output open -> drain
debug2: channel 2: obuf empty
debug2: channel 2: close_write
debug2: channel 2: output drain -> closed
debug2: channel 2: read<=0 rfd 9 len 0
debug2: channel 2: read failed
debug2: channel 2: close_read
debug2: channel 2: input open -> drain
debug2: channel 2: ibuf empty
debug2: channel 2: send eof
debug2: channel 2: input drain -> closed
debug2: channel 2: send close
debug2: channel 2: rcvd close
debug2: channel 2: is dead
debug2: channel 2: garbage collecting
debug1: channel 2: free: direct-tcpip: listening port 110 for localhost port 110, connect from 127.0.0.1 port 4302, nchannels 3

上の例を見ると、QUIT\n 送出後、remote との通信channel からeof を受け取り、
close -> drain -> closed と状態遷移し、emacs に対してeof を送り、といっ
たやりとりが見てとれるわけです。異常が出ている時の-vv出力から eof のsend/recv 
の動きと、状態の遷移がどうなっているのか、がヒントになるのではないかなと
思います。

もちろんNetwork パケットキャプチャしてEmacs <-> SSH 間のやりとりを見てみ
るのもヒントになるかと思います。

... といった辺りから、もう少し追えそうな気はします。

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN



Mew-dist メーリングリストの案内