[#7300] resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...>

あんまり ruby-dev な話でも無いのですが、ちょっとした機能拡張の提案なので、

12 messages 1999/07/12
[#7321] Re: resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1999/07/15

From: Toshihiko SHIMOKAWA / 下川俊彦 <toshi@csce.kyushu-u.ac.jp>

[#7313] Ruby 1.3.5 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.5 is out, check out:

59 messages 1999/07/15
[#7318] Re: Ruby 1.3.5 — WATANABE Hirofumi <watanabe@...> 1999/07/15

わたなべです.

[#7326] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/15

青山です。

[#7331] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/16

まつもと ゆきひろです

[#7340] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/16

青山です。

[#7368] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7373] Re: Ruby 1.3.5 — Shin-ichiro Hara <sinara@...> 1999/07/19

原です。

[#7374] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7382] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/19

青山です。

[#7386] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/21

まつもと ゆきひろです

[#7388] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/21

青山です。

[#7387] [PATCH]extconf.rb, tcltklib.c, and rubytest.rb for NetBSD — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp>

早坂@会津大学です。

10 messages 1999/07/21

[#7466] [PATCH] for djgpp — WATANABE Hirofumi <watanabe@...>

わたなべです.

21 messages 1999/07/29
[#7467] Re: [PATCH] for djgpp — Katsuyuki Komatsu <komatsu@...> 1999/07/29

小松です。

[ruby-dev:7300] resolver を呼ばない UDPsocket#recvfrom

From: Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...>
Date: 1999-07-12 02:53:12 UTC
List: ruby-dev #7300
あんまり ruby-dev な話でも無いのですが、ちょっとした機能拡張の提案なので、
こっちへ。妙な提案だから ruby-list では恥ずかしいというのもあります:-)

UDPsocket#recvfrom って、帰り値の二番目の要素として [host, port] を返し
ますよね。ここで host は getnameinfo を使って、アドレスから逆引きしてホ
スト名になって帰ってきます。この、「アドレスから逆引き」をしない
recvfrom が欲しいという要望です。

API 的にはどうするのが綺麗かよく分かりませんが、recvfrom に、真偽値な第
三引数を付けて頂くとかどうでしょうか?


例えば何らかの理由で DNS を使えない環境で UDPsocket #recvfrom を使ったス
クリプトを動かしたいと思った場合、現在の仕様だと resolver のタイムアウト
を待ったりしてしまうため、あまり嬉しくありません。

そもそも DNS が使えない環境なんてのが、問題であるという指摘もあるかと思
います。実は ruby で DNS 書いてたりするんです。このため、ruby スクリプト
からは DNS が引けないんです。

現在は、socket.c に添付の patch をあてて凌いでいます。この patch だと、
あらゆる socket に関して、ホスト名への逆引きを行ってくれないため、副作用
大きすぎです。

TCPsocket#recvfrom も、同様の機能を持っていますので、直交性を考えると、
こちらにも同様の機能を付けて頂いた方が綺麗かも知れませんが、僕的な需要は
ありません。

あまり一般的な要望では無いのは承知していますが、採用されると嬉しいなぁ。
--
としちゃん // toshi@tea.forus.or.jp, toshi@csce.kyushu-u.ac.jp

Attachments (1)

socket.c.diff (782 Bytes, text/x-diff)
--- socket.c-dist	Thu Jun 24 13:24:06 1999
+++ socket.c	Mon Jul 12 11:30:45 1999
@@ -552,17 +552,23 @@
 	family = 0;
 	break;
     }
+#define DONT_RESOLV 1
+#if !defined(DONT_RESOLV)
     error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),
 			NULL, 0, 0);
     if (error) {
 	rb_raise(rb_eSocket, "%s", gai_strerror(error));
     }
+#endif
     addr1 = rb_str_new2(hbuf);
     error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),
 			pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV);
     if (error) {
 	rb_raise(rb_eSocket, "%s", gai_strerror(error));
     }
+#if defined(DONT_RESOLV)
+    addr1 = rb_str_new2(hbuf);
+#endif
     addr2 = rb_str_new2(hbuf);
     port = INT2FIX(atoi(pbuf));
     ary = rb_ary_new3(4, family, port, addr1, addr2);

In This Thread

Prev Next