From: Akinori MUSHA Date: 2012-05-25T14:00:14+09:00 Subject: [ruby-dev:45679] Re: [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる --pgp-sign-Multipart_Fri_May_25_13:52:20_2012-1 Content-Type: text/plain; charset=ISO-2022-JP At Wed, 23 May 2012 17:23:23 +0900, U.Nakamura wrote: > In message "[ruby-dev:45671] [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる" > on May.23,2012 16:16:40, wrote: > > とりあえず、#in_addrのみを次のように上書きした際、Windowsと同様に動作することまでは確認できました。 > > Socket::AF_INET6がない場合にIPSocket.getaddressを上書きしてい > るコードがipaddr.rbの冒頭にあると思いますので、プラットフォー > ム提供のそれが信用できないならこっちを常に有効にするのもあり > かもしれません。 > Windowsだとたぶんそれを使ってるんだと思います。 IPAddr.new における IPSocket.getaddress の呼び出しですが、推測するに、 Socket.getaddrinfo(..., Socket::AI_NUMERICHOST) が意図通り動いてくれな かったので IPSocket.getaddress に書き換えたが、想定(socket のIPv6対応 は完了していたので…)に反してこいつのIPv6アドレス対応がプラットフォー ム依存だったということではないかと思います。 いずれにしても、 IPAddr レベルでのプラットフォーム依存性は望ましくない ので、これを呼ぶ前に検査および正規化(ゼロ埋め排除等)するようにします。 なお、 IPSocket.valid*? 条件付きで表に出るのは変なのでここは private に し、 IPSocket.getaddress の上書きについても AF_INET6 がない場合の IPv6アドレス対応の付加程度に止めたいと思います。 -- Akinori MUSHA / http://akinori.org/ --pgp-sign-Multipart_Fri_May_25_13:52:20_2012-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (FreeBSD) iEYEABECAAYFAk+/EAQACgkQkgvvx5/Z4e6sGgCgxi/iVkQV1TYmRIRv5ZZn9n62 +QwAoMGW15c2QAMjj6GRxOvxifomc2Gj =p7P4 -----END PGP SIGNATURE----- --pgp-sign-Multipart_Fri_May_25_13:52:20_2012-1--