まつもと ゆきひろです.
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などの高レベルクラス
を使って欲しいですね.
まつもと ゆきひろ /:|)