From: Wakou Aoyama Date: 2000-05-18T15:19:25+09:00 Subject: [ruby-list:22718] Re: about net/telnet.rb 青山です。 On Thu, 18 May 2000 12:36:50 +0900, goto@yokogawa-kouji.co.jp wrote: > また、TimeoutErrorがtimeout.rbで定義されていることはわかったのですが、 > Errno::ECONNREFUSED (Connection refused)のようなエラーはどこで定義されてい > るのか。 > 一応 error.c で呼んでいるところまでは調べたのですが、ソースを調べるしか > ないのでしょうか。 そうですね。試してみてエラーが発生したら捕捉していくという事ができない ような、あらかじめ対応しておく必要がある場合には難しいですね。 error.c に記述はあるのですが、単なる Ruby 側への再定義で、実際には /* exception classes */ #include ここで各環境の errno.h (Debian/Linux では /usr/include/asm/errno.h) を 読み込んでいます。その中に次のようにあるのですが、 #define ECONNREFUSED 111 /* Connection refused */ #define ECONNRESET 104 /* Connection reset by peer */ これだけではわかりませんよね。man error でもさして詳しい情報は得られま せんし、ましてや Ruby 的にはどうかとなると、かなり情報不足という感じは します。 ruby-lang のリファレンスマニュアルを見てみると、 > Errno > > システムコールのエラーに対応する例外を集めたモジュールです. > _________________________________________________________________ > > Errno::E* > > 各errnoに対応する例外クラスです. 実際のerrnoについてはman > errnoしてください. 結局は上のような手順になるようですね... まあ、Ruby 側で少し頑張るなら、 error.c 内で定義している分だけでもなんとかマニュアルを用意できたら、と いう感じでしょうか。 それ以外については、今の所は、ここで聞いてみて情報を集めるとか、頑張っ て errno.h について調べるとするしか無さそうです。せめて、errno.h に関 する分かりやすいというか、詳しい情報でもあるといいですね。ご存じの方い らっしゃいますか? -- 青山 和光 Wakou Aoyama