こんにちは、なかむら(う)です。 test/drbをmswin32版で実行していて気づいた点が二つあります。 一つ目は、test/drb/test_drbunix.rbをtest/runner.rb経由で実行 すると、エラーになってしまう(テストがEになる、という意味では なく)ことです。 具体的には、 | C:/ruby/lib/ruby/1.8/drb/unix.rb:80:in `temp_server': uninitialized constant DRb::DRbUNIXSocket::UNIXServer (NameError) | from C:/lang/ruby/lib/ruby/1.8/drb/unix.rb:29:in `open_server' (中略) | from test/drb/test_drbunix.rb:11:in `new' (以下略) というエラーが出ます。 要するにWindowsだからSocket::UNIX*がないということなのですが、 で、あれば、DRb::DRbUNIXSocket::UNIXServer.new を実行した時で はなくて、require 'drb/unix' したときにエラーが出て欲しいよう な気がします(そしてそれはLoadErrorあたりがうれしい)。 どうでしょうか? 二つ目は、test/drb/test_acl.rbの中でEが出ることです。 これは結局のところ、AF_INET6なしの環境でコンパイルされたruby でlib/ipaddr.rbの IPAddr#ipv6? を実行すると、Socket::AF_INET6 が定義されていないために NameError が出てしまうのが原因です。 これについてはいろいろ考えてみたところ、 (1) Socket::AF_INET6 が定義されていないときは IPAddr#ipv6? は 常に false を返す。 (2) Socket::AF_INET6 定義しちゃう。 (3) そもそもsocket.soに依存してるのがよくないので依存性排除。 (4) AF_INET6もないヤツが悪い。よって現状維持。 くらいの対策があるんではないかと思います。 で、私自身は「IPアドレスを扱うためごときでsocket.soなんかいら んやろ」と思い込んで(3)でつっぱしってみたのですが、よく考えた ら IPAddr.new の第二引数や IPAddr#family などで Socket::AF_* を受け付けている/返しているので、単純にsocket.soへの依存性を 排除してしまうと、現状との互換性がなくなってしまうのでした。 さりとて互換性を残そうとすると、元の「Socket::AF_INET6 が定義 されていない」という問題に立ち戻ってしまいます。 どうしたらいいでしょう? なお、互換性を無視して作っちゃったipaddr.rbの改造版は http://rrr.jin.gr.jp/~usa/ruby/ipaddr.diff (現状からの差分) http://rrr.jin.gr.jp/~usa/ruby/ipaddr.rb (全体) にあります。 それでは -- U.Nakamura <usa / osb.att.ne.jp>