From: Kazuhiro NISHIYAMA Date: 2003-10-28T15:59:11+09:00 Subject: [ruby-dev:21741] Re: windowsでtest/drbを実行する際の問題 西山和広です。 In <20031022171440.1622.USA@osb.att.ne.jp> On Wed, 22 Oct 2003 17:42:18 +0900 "U.Nakamura" wrote: > 二つ目は、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 が定義 > されていない」という問題に立ち戻ってしまいます。 > > どうしたらいいでしょう? Socket::AF_*のコピーのIPAddr::AF_*を定義して、 対応するSocket::AF_*がないIPAddr::AF_*はダミーを 入れておくというのはどうでしょうか? -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)