From: greentea@...2.so-net.ne.jp (Tomoyuki Kosimizu) Date: 1999-04-19T18:24:47+09:00 Subject: [ruby-list:13879] Socket.gethostbyaddr (and require) 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)