まつもと ゆきひろです.

In message "[ruby-list:861] [Q]gethostbyname"
    on 96/10/17, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:
|
|原です。勉強中です。また質問です。
|
|例えば svr.rb でソケット s に繋がっている相手のホスト名を
|知るには、
|
|remote_host_name = s.peeraddr[2]
|
|とすればいいわけですが、IP アドレスを知る効率のいい方法は
|何でしょうか?

rubyのsocketではIPアドレスが分かる時にはいつもIPアドレスを使っ
ちゃいますね.ですから,現状では

|remote_host_addr = s.getpeername.unpack('S n C4 x8,')[2..5].join('.')
|
|でいいでしょうか?

のようにs.getpeernameをつかうしか方法は無いと思うのですが,
あんまり嬉しくないですね.次のリリースではTCPsocket#addrの戻
り値の第4要素にIPアドレス(の文字列表現,"202.25.127.133"とか)
を含めるようにしましょうかねえ.

|これを実行する度に問い合わせに行くかしら?

getpeername(2)は毎回実行されます.あまり重くないとは思います
けど.

|それから、gethostbyname などの関数は ruby で使えますか。

現状では使えません.使えた方が良いのかもしれませんが,どうい
う風にしたもんだか.というのもstruct hostentのようなポインタ
を含む構造体をpack/unpackするのはあまりにも危険なので….

# しかしSocketクラスがある以上はいつかやらねばならないのだろ
# うなあ.

でも,できれば(無理でなければ)TCPsocketなどの高レベルクラス
を使って欲しいですね.
                                まつもと ゆきひろ /:|)