久保です。

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