Project

General

Profile

Actions

Feature #5959

closed

Addrinfo#inspectname

Added by naruse (Yui NARUSE) about 12 years ago. Updated about 12 years ago.

Status:
Rejected
Target version:
-
[ruby-dev:45174]

Description

Addrinfo の導入によって、Socket.getaddrinfo での正引き結果がオブジェクト化され、
元のホスト名を inspect で見れるようになってとても便利になったわけですが、
現在この元のホスト名をとりだす API がありません。

ホスト名とIP アドレスをセットで扱うのに、つまり解決済みの名前とアドレスの組を扱うのに Addrinfo って便利なので、
ホスト名を取り出す API が欲しいです。
現在の C での名前、inspectname か hostname あたりでどうでしょう。

Updated by kosaki (Motohiro KOSAKI) about 12 years ago

Addrinfo の導入によって、Socket.getaddrinfo での正引き結果がオブジェクト化され、
元のホスト名を inspect で見れるようになってとても便利になったわけですが、
現在この元のホスト名をとりだす API がありません。

ホスト名とIP アドレスをセットで扱うのに、つまり解決済みの名前とアドレスの組を扱うのに Addrinfo って便利なので、
ホスト名を取り出す API が欲しいです。
現在の C での名前、inspectname か hostname あたりでどうでしょう。

inspectname はあからさまに、inspect用というニュアンスを感じるのでそれ以外がいいなあ・・・
提案自体には特にコメントはなくてニュートラルです

Updated by akr (Akira Tanaka) about 12 years ago

2012年2月2日17:16 Yui NARUSE :

Addrinfo の導入によって、Socket.getaddrinfo での正引き結果がオブジェクト化され、
元のホスト名を inspect で見れるようになってとても便利になったわけですが、
現在この元のホスト名をとりだす API がありません。

ホスト名とIP アドレスをセットで扱うのに、つまり解決済みの名前とアドレスの組を扱うのに Addrinfo って便利なので、
ホスト名を取り出す API が欲しいです。
現在の C での名前、inspectname か hostname あたりでどうでしょう。

inspectname はホスト名ではありません。

ドキュメントの例に

  • Addrinfo.getaddrinfo("www.kame.net", 80, nil, :STREAM)
  • #=> [#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net:80)>,
  • #<Addrinfo: [2001:200:0:8002:203:47ff:fea5:3085]:80 TCP

(www.kame.net:80)>]

というところの www.kame.net:80 というように、ポートがつくこともあります。
(いま動かすとなぜかつきませんが、それは意図せざる動作です。)

inspectname は生成したときの情報を inspect のためにわかりやすいように
残しておく、というのが意図です。

また、Addrinfo の生成時には必ずしもホスト名が存在するとは限らないように思います。

[田中 哲][たなか あきら][Tanaka Akira]

Updated by akr (Akira Tanaka) about 12 years ago

2012年2月2日18:12 Tanaka Akira :

inspectname はホスト名ではありません。

ドキュメントの例に

  • Addrinfo.getaddrinfo("www.kame.net", 80, nil, :STREAM)
  • #=> [#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net:80)>,
  • #<Addrinfo: [2001:200:0:8002:203:47ff:fea5:3085]:80 TCP

(www.kame.net:80)>]

というところの www.kame.net:80 というように、ポートがつくこともあります。
(いま動かすとなぜかつきませんが、それは意図せざる動作です。)

おっと、これは意図的でした。:80 がアドレスの部分にすでに表示されていて、
冗長なので削ったでした。

"http" に指定すれば、inspectname がホスト名そのものでない例になります。

% ./ruby -rsocket -rpp -e 'pp Addrinfo.getaddrinfo("www.kame.net",
"http", nil, :STREAM)'
[#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net:http)>,
#<Addrinfo: [2001:200:dff:fff1:216:3eff:feb1:44d7]:80 TCP
(www.kame.net:http)>]

つまり、結論は同じで、inspectname はお望みのものではありません。

[田中 哲][たなか あきら][Tanaka Akira]

Updated by naruse (Yui NARUSE) about 12 years ago

(2012/02/02 18:33), Tanaka Akira wrote:

2012年2月2日18:12 Tanaka Akira :

inspectname はホスト名ではありません。

ドキュメントの例に

  • Addrinfo.getaddrinfo("www.kame.net", 80, nil, :STREAM)
  • #=> [#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net:80)>,
  • #<Addrinfo: [2001:200:0:8002:203:47ff:fea5:3085]:80 TCP

(www.kame.net:80)>]

というところの www.kame.net:80 というように、ポートがつくこともあります。
(いま動かすとなぜかつきませんが、それは意図せざる動作です。)

おっと、これは意図的でした。:80 がアドレスの部分にすでに表示されていて、
冗長なので削ったでした。

"http" に指定すれば、inspectname がホスト名そのものでない例になります。

% ./ruby -rsocket -rpp -e 'pp Addrinfo.getaddrinfo("www.kame.net",
"http", nil, :STREAM)'
[#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net:http)>,
#<Addrinfo: [2001:200:dff:fff1:216:3eff:feb1:44d7]:80 TCP
(www.kame.net:http)>]

つまり、結論は同じで、inspectname はお望みのものではありません。

なるほど、ならばわたしが欲しいのは「inspectnameの一部」ですね。
削ればいいだけのように聞こえます。

inspectname は生成したときの情報を inspect のためにわかりやすいように
残しておく、というのが意図です。

また、Addrinfo の生成時には必ずしもホスト名が存在するとは限らないように思います。

まさに生成したときの情報が欲しいので、こちらもそれで構いません。
ホスト名が存在しない場合は nil でいいんじゃないでしょうか。

--
NARUSE, Yui

Updated by akr (Akira Tanaka) about 12 years ago

2012年2月2日19:13 NARUSE, Yui :

なるほど、ならばわたしが欲しいのは「inspectnameの一部」ですね。
削ればいいだけのように聞こえます。

削ればいいのなら、inspect を使うのはどうでしょうか。

inspectname の安定性は、名前から類推できるように、inspect と同程度の見込みです。

[田中 哲][たなか あきら][Tanaka Akira]

Updated by naruse (Yui NARUSE) about 12 years ago

(2012/02/05 21:23), Tanaka Akira wrote:

2012年2月2日19:13 NARUSE, Yui :

なるほど、ならばわたしが欲しいのは「inspectnameの一部」ですね。
削ればいいだけのように聞こえます。

削ればいいのなら、inspect を使うのはどうでしょうか。

inspectname の安定性は、名前から類推できるように、inspect と同程度の見込みです。

現状では ad hoc にそうやってるんですが、API になっていないと他をいじりづらいんですよね。
以下のようなことをやりたいんですが。
その名前で引ける全てのサーバーの結果を得たい、と。

#!/usr/local/bin/ruby
require 'net/http'
class Addrinfo
def to_str
inspect[/(([a-zA-Z-.]+)/, 1]
end
def +(a)
inspect[/(([a-zA-Z-.]+)/, 1] + a
end
end
class Net::HTTP
def conn_address
@address.is_a?(Addrinfo) ? @address.ip_address : @address
end
end
Addrinfo.getaddrinfo('rubyci.org', 'http', nil, :STREAM).each do |ai|
p ai
p Net::HTTP.get_response(ai, '/')
end

--
NARUSE, Yui

Updated by akr (Akira Tanaka) about 12 years ago

2012年2月5日23:06 NARUSE, Yui :

現状では ad hoc にそうやってるんですが、API になっていないと他をいじりづらいんですよね。
以下のようなことをやりたいんですが。

これって、前に、net/http に ipaddr: を加えようとした、
[ruby-dev:44368] の再挑戦ですかね。

「他をいじる」というのの「他」があまり明確ではありませんが、
「net/http をいじる」という意味でしょうか。

http proxy を通す場合は IP アドレスを指定できないので、
net/http レベルでの設定はあまり適切じゃないんじゃないかなぁ、と思っています。

[田中 哲][たなか あきら][Tanaka Akira]

Updated by naruse (Yui NARUSE) about 12 years ago

  • Status changed from Assigned to Rejected

並列動作を考えると libcurl 使ったほうが賢い気がしてきたので reject します

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0