[#38080] ポートが閉じているときの例外など — Mitsuru Ogino <ogino@...>

荻野と申します。いつも質問や要望ばかりですみません。

36 messages 2003/08/11
[#38086] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/12

なかだです。

[#38088] Re: ポートが閉じているときの例外など — IWAOKA Masahiro <iwaoka@...> 2003/08/12

いわおかです。

[#38091] Re: ポートが閉じているときの例外など — Mitsuru Ogino <ogino@...> 2003/08/12

荻野です。

[#38092] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/12

なかだです。

[#38093] Re: ポートが閉じているときの例外など — IWAOKA Masahiro <iwaoka@...> 2003/08/12

いわおかです。

[#38095] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/12

In message <20030812150516.GV37221@barber.fe.rn.tuat.ac.jp>

[#38102] Re: ポートが閉じているときの例外など — Tetsuo NAKAGAWA <tet@...> 2003/08/14

中川と申します。

[#38121] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/15

In message <20030814.140757.707824131.tetsuo@sapphire.siz.nes.nec.co.jp>

[#38123] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/16

なかだです。

[#38130] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/16

In message <200308160517.h7G5HcPL012839@sharui.nakada.kanuma.tochigi.jp>

[#38137] Re: ポートが閉じているときの例外など — nobu.nakada@... 2003/08/18

なかだです。

[#38139] Re: ポートが閉じているときの例外など — Takahiro Kambe <taca@...> 2003/08/18

In message <200308180959.h7I9xnb7001977@sharui.nakada.kanuma.tochigi.jp>

[#38122] ruby-tcpwrap and mkmf.rb — Takahiro Kambe <taca@...>

こんにちは。

16 messages 2003/08/16
[#38125] Re: ruby-tcpwrap and mkmf.rb — "Akinori MUSHA" <knu@...> 2003/08/16

At Sat, 16 Aug 2003 12:51:55 +0900,

[#38183] String << の動作につきまして — kuto@...

うと と申します。

44 messages 2003/08/22
[#38187] Re: String << の動作につきまして — Take_tk <ggb03124@...> 2003/08/22

たけ(tk)です。

[#38189] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38190] Re: String << の動作につきまして — Take_tk <ggb03124@...> 2003/08/23

たけ(tk)です。

[#38191] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38194] Re: String << の動作につきまして — Take_tk <ggb03124@...> 2003/08/23

たけ(tk)です。

[#38196] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38203] Re: String << の動作につきまして — 西 啓一朗 <receiver@...> 2003/08/23

ども、西啓一朗@Ktouth Brand. です。

[#38208] Re: String << の動作につきまして — Tadayoshi Funaba <tadf@...5.so-net.ne.jp> 2003/08/23

ふなばです。

[#38211] Re: String << の動作につきまして — 西 啓一朗 <receiver@...> 2003/08/24

ども、西啓一朗@Ktouth Brand. です。

[#38195] 理解の進め方(Re: String << の動作につきまして) — Tadashi Oh-Ya <toy@...>

おおやです。

36 messages 2003/08/23
[#38206] 理解の進め方:シュールな世界 — Take_tk <ggb03124@...> 2003/08/23

たけ(tk)です。

[#38233] シュールな名前 — Take_tk <ggb03124@...> 2003/08/25

たけ(tk)です

[#38198] Tmailで送るメールに日付がつけられなくなりました — 川田誠司 <kawada.seiji@...>

はじめまして

11 messages 2003/08/23

[#38256] かみ砕いた説明をすべき範囲 — 西 啓一朗 <receiver@...>

ども。西啓一朗@Ktouth Brand. です。

41 messages 2003/08/26
[#38258] Re: かみ砕いた説明をすべき範囲 — nobu.nakada@... 2003/08/26

なかだです。

[#38261] Re: かみ砕いた説明をすべき範囲 — Take_tk <ggb03124@...> 2003/08/26

たけ(tk)です

[#38262] Re: かみ砕いた説明をすべき範囲 — nobu.nakada@... 2003/08/26

なかだです。

[#38264] Re: かみ砕いた説明をすべき範囲 — Take_tk <ggb03124@...> 2003/08/26

たけ(tk)です

[#38265] Re: かみ砕いた説明をすべき範囲 — IWAOKA Masahiro <iwaoka@...> 2003/08/26

いわおかです。

[#38267] Re: かみ砕いた説明をすべき範囲 — Take_tk <ggb03124@...> 2003/08/26

たけ(tk)です

[#38273] Re: かみ砕いた説明をすべき範囲 — matz@... (Yukihiro Matsumoto) 2003/08/26

まつもと ゆきひろです

[ruby-list:38080] ポートが閉じているときの例外など

From: Mitsuru Ogino <ogino@...>
Date: 2003-08-11 12:16:11 UTC
List: ruby-list #38080
荻野と申します。いつも質問や要望ばかりですみません。

Ruby 1.6.8 において net/smtp や net/pop を使用させていただいていますが、
サーバがポートを開いていなかったときに発生する例外が、ちょっとわかりづ
らく感じました。もし、可能であれば将来のバージョンでは修正していただけ
るとうれしいです。

自分でパッチを提案できれば良いのですが、私の技量ではそもそも 
net/protocol.rb で対処すべき問題なのかどうかすらわかりませんでした。

# 1.8.0 で修正済みでしたらすみません。

    $ telnet 192.168.0.1 smtp
    (snip)
    220 xxx.xxx.xxx ESMTP Postfix
    quit
    221 Bye

    $ telnet 192.168.0.2 smtp
    Trying 192.168.0.2...
    telnet: connect to address 192.168.0.2: Connection refused
    telnet: Unable to connect to remote host

    $ ruby -v
    ruby 1.6.8 (2003-03-26) [i386-freebsd5]

のとき、

    $ ruby -r net/smtp -e 'Net::SMTP::start("192.168.0.1") { |smtp| }'
    $ (エラーなしで終了)

ですが、ポートが閉じているときは、Invalid argument - "connect(2)"
(Errno::EINVAL) と表示されます。

   $ ruby -r net/smtp -e 'Net::SMTP::start("192.168.0.2") { |smtp| }'
    /usr/local/lib/ruby/1.6/net/protocol.rb:468:in `new': Invalid argument - "connect(2)" (Errno::EINVAL)
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:468:in `connect'
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:467:in `timeout'
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:467:in `connect'
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:449:in `initialize'
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:149:in `new'
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:149:in `conn_socket'
	    from /usr/local/lib/ruby/1.6/net/smtp.rb:237:in `do_start'
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:131:in `start'
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:71:in `start'
	    from -e:1

net/pop でも同様になります。

確かに引数が違っているとも言えなくはないのですが、ProtocolError のサブ
クラスを返してもらえると、私のように面食らう人間が減りそうですのでご検
討いただければと思い、メールを出させていただきました。


もう一つ、比較的小さな要望としましては、サーバが応答しない場合、

    $ ruby -r net/smtp -e 'Net::SMTP::start("192.168.0.3") { |smtp| }'
    /usr/local/lib/ruby/1.6/timeout.rb:37:in `connect': execution expired (TimeoutError)
	    from /usr/local/lib/ruby/1.6/net/protocol.rb:467:in `timeout'
    (以下略)

と TimeoutError が返りますが、これも使用する側で timeout.rb を使用して
いるときに混乱になりますので、

    ライブラリで timeout.rb を使う場合は、ユーザが指定した timeout を
    捕捉しないように、ライブラリ内では TimeoutError のサブクラスを定義
    して使用した方が無難です。
    <http://www.ruby-lang.org/ja/man-1.6/index.cgi?cmd=view;name=TimeoutError>

と推奨(?)されているように、サブクラスを返していただけると助かるよう
に思います。(ProtoNoResponseError or ProtoTimeoutOnConnectError とか、
読み出し時の TimeoutError と区別できるとなおうれしい…)

# 個人的には接続時のエラーは ProtocolError のサブクラスの方が使いやす
# いようにも思うのですが、よくわかりません。

しかし grep で require 'timeout' を/usr/local/lib/ruby/1.6/ 以下で検索
しても、該当する以下の標準添付ライブラリ全部で、特に TimeoutError を補
足しているようには見えませんでした。私はなにか勘違いしているのでしょう
か…

    /usr/local/lib/ruby/1.6/resolv.rb
    /usr/local/lib/ruby/1.6/ping.rb
    /usr/local/lib/ruby/1.6/net/telnet.rb
    /usr/local/lib/ruby/1.6/net/protocol.rb

なお、net/protocol.rb では、読み出し関連でも、raise TimeoutError と 
TimeoutError をそのままあげている部分もあるように見えます。(1.6.8/CVS
HEAD)


ついでに、書かせていただくと、添付ライブラリのリファレンスマニュアルに、
TimeoutError(またはそのサブクラス)があがることが書いてあると、(私の
ように)さらに timeout で囲ってしまう人が減るかもしれません。


勝手申しますが、ご検討いただければ幸いです。

-- 
荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず
Verama Systems

Key fingerprint = 7F26 5414 1805 F31B 1617  10B7 C117 07AE 1691 9BD1

In This Thread

Prev Next