From: Yutaka Kanemoto Date: 2009-10-17T00:47:13+09:00 Subject: [ruby-dev:39499] sockaddr_storageのメンバ 金本と申します。 AIXでss_lenがないといわれてsocket.soがつくれないのですが、 メンバを調べてみると、ss_familyと__ss_lenという組み合わせでした。 現状ext/socket/extconf.rbでは、ss_familyとss_lenは 頭に __ が 両方ついているか両方ついていないかという状況しか対応できないようです。 AIX5.1では両方についていたのですが、AIX5.2以降でss_familyのほうだけ __がなくなりました。 そこで、以下のように別々の判定にしてしのいでみました。 AIX以外のプラットフォームで影響がでかねない変更なので、 身の回りをしらべたところ、ほかにss_lenがあるのをみつけたのはFreeBSD 7.2ぐらいだったのですが、 影響はなさそうでした。 こんな内容でコミットさせていただいてもよろしいでしょうか? Index: ext/socket/extconf.rb =================================================================== --- ext/socket/extconf.rb (revision 25376) +++ ext/socket/extconf.rb (working copy) @@ -97,8 +97,10 @@ # doug's fix, NOW add -Dss_family... only if required! doug = proc {have_struct_member("struct sockaddr_storage", "ss_family", headers)} if (doug[] or - with_cppflags($CPPFLAGS + " -Dss_family=__ss_family -Dss_len=__ss_len", &doug)) + with_cppflags($CPPFLAGS + " -Dss_family=__ss_family", &doug)) $defs[-1] = "-DHAVE_SOCKADDR_STORAGE" + doug = proc {have_struct_member("struct sockaddr_storage", "ss_len", headers)} + doug[] or with_cppflags($CPPFLAGS + " -Dss_len=__ss_len", &doug) end if have_struct_member("struct sockaddr", "sa_len", headers) よろしくお願いいたします。 -- Yutaka KANEMOTO http://d.hatena.ne.jp/kinpoco/