久保です。 ruby-dev のほうが良いんでしょうけど、ruby-dev にも ruby-core にも入っ てないのでこちらへメールします。 ruby-talk:142201 にも出したのですが、AIX の getaddrinfo() は (struct addrinfo *)->ai_addr->sa_family (struct addrinfo *)->ai_addr->sa_len の2つのメンバーが常に 0 なので extconf.rb の getaddrinfo() のチェック で失敗します。そのため現在、configure に --without-ipv6 をつけないと socket.so がビルドできずに失敗します。 そこで、これらの値をそれぞれ (struct addrinfo *)->ai_family (struct addrinfo *)->ai_addrlen でもって補完するパッチを作成しました。とり込んでいただけないでしょうか。 ついでに、AIX 4.3.3 には AI_NUMERICHOST がなくてコンパイルに失敗するので、 #ifdef AI_NUMERICHOST で場合分けするパッチも入っています。 Index: extconf.rb =================================================================== RCS file: /src/ruby/ext/socket/extconf.rb,v retrieving revision 1.40 diff -u -r1.40 extconf.rb --- extconf.rb 10 Feb 2005 04:55:33 -0000 1.40 +++ extconf.rb 24 May 2005 11:30:44 -0000 @@ -155,8 +155,13 @@ } for (ai = aitop; ai; ai = ai->ai_next) { if (ai->ai_family == AF_LOCAL) continue; - if (ai->ai_addr == NULL || - ai->ai_addrlen == 0 || + if (ai->ai_addr == NULL) + goto bad; +#if defined(_AIX) + ai->ai_addr->sa_len = ai->ai_addrlen; + ai->ai_addr->sa_family = ai->ai_family; +#endif + if (ai->ai_addrlen == 0 || getnameinfo(ai->ai_addr, ai->ai_addrlen, straddr, sizeof(straddr), strport, sizeof(strport), NI_NUMERICHOST|NI_NUMERICSERV) != 0) { Index: socket.c =================================================================== RCS file: /src/ruby/ext/socket/socket.c,v retrieving revision 1.144 diff -u -r1.144 socket.c --- socket.c 9 Mar 2005 09:29:51 -0000 1.144 +++ socket.c 24 May 2005 11:31:13 -0000 @@ -169,6 +169,30 @@ #define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo((node),(serv),(hints),(res)) #endif +#if defined(_AIX) +static int +ruby_getaddrinfo__aix(nodename, servname, hints, res) + char *nodename; + char *servname; + struct addrinfo *hints; + struct addrinfo **res; +{ + int error = getaddrinfo(nodename, servname, hints, res); + struct addrinfo *r; + if (error) + return error; + for (r = *res; r != NULL; r = r->ai_next) { + if (r->ai_addr->sa_family == 0) + r->ai_addr->sa_family = r->ai_family; + if (r->ai_addr->sa_len == 0) + r->ai_addr->sa_len = r->ai_addrlen; + } + return 0; +} +#undef getaddrinfo +#define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo__aix((node),(serv),(hints),(res)) +#endif + #ifdef HAVE_CLOSESOCKET #undef close #define close closesocket @@ -2475,7 +2499,9 @@ * 4th element holds numeric form, don't resolve. * see ipaddr(). */ +#ifdef AI_NUMERICHOST /* AIX 4.3.3 doesn't have AI_NUMERICHOST. */ hints.ai_flags |= AI_NUMERICHOST; +#endif } } else { では、再見 -- 久保 健洋 email: kubo / jiubao.org web: http://www.jiubao.org GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1 9F47 C001 1F93 AC08 2262