From: "Toshihiko SHIMOKAWA / 下川俊彦" Date: 1999-07-19T10:41:44+09:00 Subject: [ruby-dev:7371] Re: resolver を呼ばない UDPsocket#recvfrom From: matz@netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-dev:7367] Re: resolver を呼ばない UDPsocket#recvfrom Date: Mon, 19 Jul 1999 09:21:46 +0900 > 返事しなかったのは無視してたからではなくて、考えてたからです。 あぁ、良かった:-) > ニーズはわかってきました。 どもどもです。 > RubyでDNS... すごすぎ。 っていうか、このために UDPsocket クラス作って貰ったとも言います;-) ま Perl で DNS 書く方々もいらっしゃるくらいですし:-) > |各ソケットインスタンスに、自動的に逆引きによるホスト名検索を行うかどうか > |という属性を持たせます。デフォルトは検索を行う、にしておきます。あとはそ > |の属性を変更できるメソッドを用意します。 > > あー、これ面白いかも。 なんとなく、このほうが綺麗かなという気がしています。 > |逆引きを行うかどうかと言う属性(状態)は、各ソケットインスタンスではなく、 > |インタプリタ全体で一つ持ってれば充分かもしれません。 > > どっちが良いでしょうかねえ。 インスタンス毎のほうが綺麗な気はします。ただ TCPserver#accept で得られる インスタンスの属性は、元の TCPserver のインスタンスのの属性を引き継ぐの かな? とか、ちと考えちゃうところはあります。 From: matz@netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-dev:7369] Re: resolver を呼ばない UDPsocket#recvfrom Date: Mon, 19 Jul 1999 10:04:30 +0900 > recvfromが返すのは > > [family, port, host, octet_decial] > > な配列ですから、「実際の送り手を判断する手段が全くありません」 > ということはないです。 TCPsocket#recvfrom に関してはそのとおりです。しかし、 UDPsocket#recvfrom が返すのは [host, port] な配列だったりします。とゆこ とで、高島さんがご指摘のように「実際の送り手を判断する手段が全くありませ ん」な状態な気がします。 一番美しいのは、UDPsocket#recvfrom の帰り値の 2番目の要素を TCPsocket#recvfrom に合わせて IPsocket#addr にすることだと思います。後方 互換性が全くないのがドキドキではあります。 一番シンプルなのは UDPsocket#recvfrom の帰り値の 2番目の要素を IP アドレ スを示す文字列にすることだと思います。逆引きに失敗したときの動作ですし、 多くのプログラムはこの変更を加えても動くと思います。ホスト名が欲しい人は、 この値を元に Socket#gethostbyaddr してね、というとこで。なんとなく、お手 軽感が薄れるのが残念です。 もしも、IPsocket#addr が帰ってくるとしても、その第3要素のホスト名を逆引 きしないという選択肢が欲しいという、僕の要望は変わりません。 -- としちゃん