From: Minero Aoki Date: 2003-08-14T13:52:44+09:00 Subject: [ruby-list:38101] Re: ポートが閉じているときの例外など 青木です。 In mail "[ruby-list:38080] ポートが閉じているときの例外など" Mitsuru Ogino wrote: > 荻野と申します。いつも質問や要望ばかりですみません。 (略) > ですが、ポートが閉じているときは、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) これについては他のかたから返事が来てるので省略します。 > もう一つ、比較的小さな要望としましては、サーバが応答しない場合、 > > $ 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 を使用して > いるときに混乱になりますので、 > と推奨(?)されているように、サブクラスを返していただけると助かるよう > に思います。(ProtoNoResponseError or ProtoTimeoutOnConnectError とか、 > 読み出し時の TimeoutError と区別できるとなおうれしい…) これは特に影響もなさそうなので対応しましょう。 > # 個人的には接続時のエラーは ProtocolError のサブクラスの方が使いやす > # いようにも思うのですが、よくわかりません。 うーん、個人的にはエラーはごっそりまとめて処理しちゃうんで うまく分類する自信がありません。とりあえず、荻野さんのコードの 例外補足部分を見せていただけたりすると助かるのですが、どうでしょう。 (つまり、どういうことがしたいのかが知りたい) あと、#finish で IOError を 投げたりしますけど、これも SMTPError なりの下位クラスに変更 すべきだと思いますか? ちなみに、Proto*Error はまとめて obsolete にするつもりです。 もちろん残しますが、積極的には推奨しません。net/protocol.rb 自体、 そのうち消す予定です。 > しかし grep で require 'timeout' を/usr/local/lib/ruby/1.6/ 以下で検索 > しても、該当する以下の標準添付ライブラリ全部で、特に TimeoutError を補 > 足しているようには見えませんでした。私はなにか勘違いしているのでしょう > か… その記述は知りませんでした。 > ついでに、書かせていただくと、添付ライブラリのリファレンスマニュアルに、 > TimeoutError(またはそのサブクラス)があがることが書いてあると、(私の > ように)さらに timeout で囲ってしまう人が減るかもしれません。 これも対応します。akr さんからは EOFError も書けーと言われてるので それも書いときます。 ------------------------------------------------------------------- 青木峰郎