AIX4.3.3で。

どうもgetaddrinfoなどの行儀がよくないようだ。druby://:0 とかで、serviceが0なときに怒られます。かえされたstruct addrinfoにprotocolとかセットされていないみたい。どうも他にもそういうプラットフォームがあるらしい。というわけで、4.3.3用にパッチを書いてみた。こういう逃げ方でいいかどうかはどう判断するんだろうか。4.3.3サポート切れていてドキュメント見つけられないし。

diff -ru oi/ruby/ext/socket/socket.c ruby/ext/socket/socket.c
--- oi/ruby/ext/socket/socket.c 2006-08-01 09:51:34.000000000 -0500
+++ ruby/ext/socket/socket.c    2006-08-06 06:07:26.000000000 -0500
@@ -181,7 +181,16 @@
      struct addrinfo *hints;
      struct addrinfo **res;
 {
-    int error = getaddrinfo(nodename, servname, hints, res);
+    int error;
+
+#ifndef _AIXVERSION510
+    if (!strcmp(servname,"0")) {
+      servname=NULL;
+    }
+#endif
+
+    error = getaddrinfo(nodename, servname, hints, res);
+
     struct addrinfo *r;
     if (error)
        return error;
@@ -898,7 +907,7 @@
        rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));
     }

-#if defined(__APPLE__) && defined(__MACH__)
+#if defined(__APPLE__) && defined(__MACH__) || defined(_AIX) && !defined(_AIXVERSION510)
     {
         struct addrinfo *r;
        r = res;