Kimura Fuyuki
fuyuk****@hadal*****
2003年 5月 4日 (日) 09:09:16 JST
At Fri, 02 May 2003 23:26:07 -1000 (HST), Shiro Kawai <shiro****@lava*****> wrote: > > HAVE_IPV6でなくても AF_INET6 の定義はあったりするので、 実はこれをひそかに恐れていました。やっぱりそういう環境がありましたか。 (if ... define-enum ... ) をさらに if でくくっておきたかったのですが、 それは今のところできないようなので。 > かわりに > (define ipv6-capable (symbol-bound? 'sys-getaddrinfo)) > としたら通りました。 では当面こちらでいきましょうか。 > こういう、プラットフォーム依存な条件をどう処理するかですが、 > Scheme的にはsrfi-0の形に持って行くのが綺麗かなと思っています。 > つまり、 > > (cond-expand > (ipv6-capable > (define (make-hints ...) ...)) > (else #f)) > > みたいに書けるといいなと。(if ...) だと実行時の解釈に > なるので、内部にマクロが入っていたりするとややこしいことに > なります。cond-expandはマクロなので、条件が合わない場合は > コードが実質的に消えてくれます。 なるほど、こういうときこそsrfi-0が使えるといいですね。実はこういう条件 をどう書けばいいのか全然わかっていませんでした。最初はwhen で書いて、 あれトップレベルで見えないぞとか… ;) > これはなかなか良いと思いますが、v6で通信できるのにv4を明示的に > 指定したい時ってあるのかな。サーバソケットなんかはどうなんでしょう。 たぶんあると思います。が、高レベルインターフェースをあまり複雑にしても しょうがないので、特定のアドレスを指定したいときには自力で名前解決して そのアドレスを渡してもらうということで。ただし、make-server-socket に ついてはこれができません(host引数がないから)。v4 だけで使う場合にも bindするアドレスは限定できたほうがいいと思うんですけどね。しかしhost引 数を追加すると互換性がなくなってしまうので困っています。 > 自分で使ってないからそのへんさっぱりわかりません。 IPv6のしきいはそんなに高くないですよ。ちょっと試してみるだけなら6to4で 十分です。グローバルなv4アドレスが1個あればいけます。 > あと、make-hintsという名前はちょっと一般的すぎる気もします。 > 思います。addrinfo絡みということがわかるような名前が > あるといいんですが。 同感です。make-addrinfo-hints か make-ai-hints ですかね。 -- 木村 冬樹