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;