RubyのSocket#gethostbyaddr()がおかしいようです。

Cでのgethostbyaddr()の使われ方を『プログラミングLinux』(M.K.Johnson他、
アスキー)から抜粋すると:

int main(int argc, char *argv[])
{
  struct hostent *answer;
  struct in_addr address;

  if (inet_aton(argv[1], &address)) {
    answer = gethostbyaddr((char*)&address, sizeof(address), AF_INET);
  } else {
    ...

となっています。この本によると、Cのgethostbyaddr()への第1引数は、
(char *)になってますが、実際には(in_addrの先頭に収められている)
アドレスのバイナリ表現なんだそうです。

もう1つ。

#!/usr/local/bin/ruby

require "socket"

print IPsocket.getaddress(ARGV[0]), "\n"

このコードを`socket.rb'(笑)に保存して実行すると、スタック_オーバー
フローを起こしました。いわれてみれば当り前なんですけど、ちょっと腑に
落ちません。

$RUBYLIBは設定していないのですが、$:を見ると、次のようになってます:

/usr/local/lib/ruby
/usr/local/lib/ruby/site-ruby
/usr/local/lib/ruby/site_ruby/i486-linux
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/i486-linux
/usr/local/lib/ruby
.

で、socketライブラリの実体であるsocket.soは:

/usr/local/lib/ruby/i486-linux

にあります。ということは、requireでの検索順序は、最後の要素であるカレ
ント_ディレクトリから始まっているんでしょうか?

越水 (greentea / fa2.so-net.ne.jp)