[Mew-dist 12242] Re: im-13[5-7] imput error

SAKAI Kiyotaka ksakai at example.com
2000年 2月 4日 (金) 09:43:38 JST


>> In article <200002031201.VAA24936 at example.com>, Koyama Mituru <mkoya at example.com> writes:

>   メッセージが出力され続けるということは、システムライブラリから戻っ
> て来ないわけではなく、エラーが返ってきたとき、IMでリトライが無限に
> 繰り返されているのだと思うのですが、うーむ、私にはどこがどうなって
> いるのかつかめません。

これで分かりました。

  smtp_transaction() → smtp_transact_sub() → smtp_open()
    → connect_server()

という順序で関数が呼び出されていますが、connect_server() で接続が失敗
したときは smtp_transaction() 内で $#$servers >=0 の間は do ループが周
るようになっています。

この @$servers は connect_server() 内で shift することで 1要素ずつ減っ
ていくはずなのですが、最近のバージョンでは foreach に置き換わっていた
ため、@$servers の値が変更されずにループが周り続けることになっていまし
た。

以下のパッチで、以前のバージョンのように while + shift に戻せば直るか
と思います。
-- 
酒井 清隆 (E-mail: ksakai at example.com)
-------------- next part --------------
Index: TcpTransaction.pm
===================================================================
RCS file: /home/ksakai/cvsroot/im-137/IM/TcpTransaction.pm,v
retrieving revision 1.2
diff -u -r1.2 TcpTransaction.pm
--- TcpTransaction.pm	2000/02/04 00:34:29	1.2
+++ TcpTransaction.pm	2000/02/04 00:34:44
@@ -79,7 +79,7 @@
     @Response = ();
     my (@he_infos);
     my ($s, $localport, $remoteport);
-    foreach $s (@$servers) {
+    while ($s = shift(@$servers)) {
 	$Cur_server_original_form = $s;
 	my ($r) = ($#$servers >= 0) ? 'skipped' : 'failed';
 	# manage server[/remoteport]%localport


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