From: "M. Kozuka" Date: 2008-04-26T15:17:24+09:00 Subject: [ruby-dev:34517] IPv6 support for mswin ruby-dev MLの皆様、はじめまして。 小塚といいます。 現在、1.8系、1.9系共に、mswinでは正攻法ではIPv6が うまく使えず(ヘッダが不適切なためipv6の有無が常に失敗する) 悲しい思いをしています。 以下のような変更で通るようになると思いますが、どうでしょうか。 (他のプラットフォームで不具合があるかどうか未検証です。 あと、WinXPで作ったバイナリが2kで動かなくなるとかあるかもです) Index: ext/socket/extconf.rb =================================================================== --- ext/socket/extconf.rb (revision 16197) +++ ext/socket/extconf.rb (working copy) @@ -30,9 +30,24 @@ end ipv6 = false -default_ipv6 = /cygwin/ !~ RUBY_PLATFORM -if enable_config("ipv6", default_ipv6) - if checking_for("ipv6") {try_link(< #include main() @@ -40,8 +55,9 @@ socket(AF_INET6, SOCK_STREAM, 0); } EOF - $defs << "-DENABLE_IPV6" << "-DINET6" - ipv6 = true + $defs << "-DENABLE_IPV6" << "-DINET6" + ipv6 = true + end end end @@ -105,7 +121,13 @@ end getaddr_info_ok = enable_config("wide-getaddrinfo") do + wsastartup = < @@ -123,8 +145,9 @@ main() { int passive, gaierr, inet4 = 0, inet6 = 0; - struct addrinfo hints, *ai, *aitop; + struct addrinfo hints, *ai, *aitop = NULL; char straddr[INET6_ADDRSTRLEN], strport[16]; +#{wsastartup} for (passive = 0; passive <= 1; passive++) { memset(&hints, 0, sizeof(hints)); @@ -234,7 +257,7 @@ $objs = ["socket.#{$OBJEXT}"] -unless getaddr_info_ok and have_func("getnameinfo", "netdb.h") and have_func("getaddrinfo", "netdb.h") +unless getaddr_info_ok and have_func("getnameinfo", headers) and have_func("getaddrinfo", headers) if have_struct_member("struct in6_addr", "s6_addr8", headers) $defs[-1] = "-DHAVE_ADDR8" end Index: include/ruby/win32.h =================================================================== --- include/ruby/win32.h (revision 16197) +++ include/ruby/win32.h (working copy) @@ -28,6 +28,7 @@ // #include conflict with varargs.h? #if !defined(WSAAPI) #include +#include #endif #define NT 1 /* deprecated */ Index: win32/Makefile.sub =================================================================== --- win32/Makefile.sub (revision 16197) +++ win32/Makefile.sub (working copy) @@ -260,7 +260,7 @@ COMMON_MACROS = WIN32_LEAN_AND_MEAN WIN32 !endif !ifndef COMMON_HEADERS -COMMON_HEADERS = winsock2.h windows.h +COMMON_HEADERS = winsock2.h ws2tcpip.h windows.h !endif arch_hdrdir = $(EXTOUT)/include/$(arch) -- KOZUKA Masahiro @ Graduate School of Law, Kyoto University, Japan