Index: ext/socket/extconf.rb =================================================================== --- ext/socket/extconf.rb (révision 13588) +++ ext/socket/extconf.rb (copie de travail) @@ -41,8 +41,15 @@ default_ipv6 = /cygwin/ !~ RUBY_PLATFORM if enable_config("ipv6", default_ipv6) if checking_for("ipv6") {try_link(< +#include +#include +#else #include #include +#endif main() { socket(AF_INET6, SOCK_STREAM, 0); @@ -122,6 +129,12 @@ getaddr_info_ok = enable_config("wide-getaddrinfo") do checking_for("wide getaddrinfo") {try_run(< +#include +#include +#endif #include #ifndef EXIT_SUCCESS @@ -141,6 +154,18 @@ struct addrinfo hints, *ai, *aitop; char straddr[INET6_ADDRSTRLEN], strport[16]; +#ifdef _WIN32 + WORD version; + WSADATA retdata; + + version = MAKEWORD(2, 2); + if (WSAStartup(version, &retdata) || (LOBYTE(retdata.wVersion) != 2)) + { + printf("Unable to locate winsock library!"); + goto bad; + } +#endif + for (passive = 0; passive <= 1; passive++) { memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; @@ -214,11 +239,17 @@ if (aitop) freeaddrinfo(aitop); +#ifdef _WIN32 + WSACleanup(); +#endif exit(EXIT_SUCCESS); bad: if (aitop) freeaddrinfo(aitop); +#ifdef _WIN32 + WSACleanup(); +#endif exit(EXIT_FAILURE); } EOF @@ -231,6 +262,8 @@ you cannot compile IPv6 socket classes with broken these functions. You can try --enable-wide-getaddrinfo. EOS +else + $defs << "-DHAVE_GETADDRINFO" end case with_config("lookup-order-hack", "UNSPEC") @@ -249,7 +282,14 @@ $objs = ["socket.#{$OBJEXT}"] -unless getaddr_info_ok and have_func("getnameinfo", "netdb.h") and have_func("getaddrinfo", "netdb. h") +unless getaddr_info_ok + + unless $mswin or $bccwin or $mingw + have_func("getnameinfo", "netdb.h") and have_func("getaddrinfo", "netdb.h") + else + have_func("getnameinfo", "WS2tcpip.h") and have_func("getaddrinfo", "WS2tcpip.h") + end + if have_struct_member("struct in6_addr", "s6_addr8", headers) $defs[-1] = "-DHAVE_ADDR8" end @@ -263,9 +303,11 @@ have_header("resolv.h") end +unless $mswin or $bccwin or $mingw unless have_type("socklen_t", headers) $defs << "-Dsocklen_t=int" end +end have_header("sys/un.h") have_header("sys/uio.h") Index: ext/socket/socket.c =================================================================== --- ext/socket/socket.c (révision 13588) +++ ext/socket/socket.c (copie de travail) @@ -25,6 +25,10 @@ #include #endif +#ifdef _WIN32 +#include +#endif + #ifndef _WIN32 #if defined(__BEOS__) # include @@ -2254,6 +2258,10 @@ ptr = RSTRING(domain)->ptr; if (strcmp(ptr, "AF_INET") == 0) *dv = AF_INET; +#ifdef AF_INET6 + else if (strcmp(ptr, "AF_INET6") == 0) + *dv = AF_INET6; +#endif #ifdef AF_UNIX else if (strcmp(ptr, "AF_UNIX") == 0) *dv = AF_UNIX; @@ -2274,6 +2282,10 @@ else if (strcmp(ptr, "PF_INET") == 0) *dv = PF_INET; #endif +#ifdef PF_INET6 + else if (strcmp(ptr, "PF_INET6") == 0) + *dv = PF_INET6; +#endif #ifdef PF_UNIX else if (strcmp(ptr, "PF_UNIX") == 0) *dv = PF_UNIX; Index: win32/win32.c =================================================================== --- win32/win32.c (révision 13588) +++ win32/win32.c (copie de travail) @@ -2116,7 +2116,7 @@ // cleaned up at exit. // #ifdef USE_WINSOCK2 - version = MAKEWORD(2, 0); + version = MAKEWORD(2, 2); if (WSAStartup(version, &retdata)) rb_fatal ("Unable to locate winsock library!\n"); if (LOBYTE(retdata.wVersion) != 2) Index: win32/Makefile.sub =================================================================== --- win32/Makefile.sub (révision 13588) +++ win32/Makefile.sub (copie de travail) @@ -424,7 +424,7 @@ s,@COMMON_LIBS@,m,;t t s,@COMMON_MACROS@,WIN32_LEAN_AND_MEAN,;t t !if defined(USE_WINSOCK2) -s,@COMMON_HEADERS@,winsock2.h windows.h,;t t +s,@COMMON_HEADERS@,winsock2.h ws2tcpip.h windows.h,;t t !else s,@COMMON_HEADERS@,windows.h winsock.h,;t t !endif