Shiro Kawai
shiro****@lava*****
2003年 5月 3日 (土) 18:26:07 JST
From: Kimura Fuyuki <fuyuk****@hadal*****> Subject: Re: [Gauche-devel-jp] IPv6サポートへ向けて Date: Sat, 03 May 2003 12:29:26 +0900 > 考えがまとまったので、先にこっちをやりました。テストをお願いします。 > http://www.hadaly.org/fuyuki/gauche-ipv6.patch-2 HAVE_IPV6でなくても AF_INET6 の定義はあったりするので、 かわりに (define ipv6-capable (symbol-bound? 'sys-getaddrinfo)) としたら通りました。 こういう、プラットフォーム依存な条件をどう処理するかですが、 Scheme的にはsrfi-0の形に持って行くのが綺麗かなと思っています。 つまり、 (cond-expand (ipv6-capable (define (make-hints ...) ...)) (else #f)) みたいに書けるといいなと。(if ...) だと実行時の解釈に なるので、内部にマクロが入っていたりするとややこしいことに なります。cond-expandはマクロなので、条件が合わない場合は コードが実質的に消えてくれます。 現在のsrfi-0の実装はfeature identifierを後から追加できない のでこういう目的にあまり使えないのですが、いずれ改造しようと 思っています。 > make-client-socket, make-server-socket 共に、IPv6が有効な場合は、 > getaddrinfo で得られたアドレスのうち、最初に connect/listen に成功した > ものを使います。後者については「成功したものすべて」のほうが正しい動作 > かもしれませんが、それが必要なら make-server-sockets を新設すべきでしょ > う。 > > 要するに、make-client/server-socket を使った既存のコードがそのままで > 「IPv6対応」になるようにしたわけです。 これはなかなか良いと思いますが、v6で通信できるのにv4を明示的に 指定したい時ってあるのかな。サーバソケットなんかはどうなんでしょう。 自分で使ってないからそのへんさっぱりわかりません。 あと、make-hintsという名前はちょっと一般的すぎる気もします。 思います。addrinfo絡みということがわかるような名前が あるといいんですが。 --shiro