IIIMF をホゲっていて、 getaddrinfo() を実行するコードに「#ifdef HAVE_GETADDRINFO」 が施されていて、configure.ac で 「AC_CHECK_FUNC(getaddrinfo)」していなかったために、結果として getaddrinfo() が使われていなかった。なんでこの部分を skip するようにしていたのかを調べたところ、 glibc の netdb.h では AI_ADDRCONFIG が定義されていなかったため、素の IIIMF のソースでは多分そのままでは Linux ではビルドできなかったのだろうと想像がついた。
この部分を glibc に実装してやればいいんじゃないかと思って調べてみたところ、IPv6 関連の C 言語 API はRFC2553 : "Basic Socket Interface Extensions for IPv6"に定義されていた。てっきりどこにも API の仕様がなくって、また BSD (というか KAME) を参照しろとか言われるのかと思っていたんだけど、それなりに文書化されていたのに気付く。んで、AI_ADDRCONF などは USAGI の libinet6 あたりからパチってglibc に コピペ してやればヨサゲ。
ついでなネタなのですが、IIIMF の Client (htt_xbe) がうまく動かなかった理由なのですが、htt_server と接続するときに htt_server から connection refused を喰らっていた。思えば、htt_server って全然 syslog を吐かない、というか log するという実装になっていないっす。同様に htt_xbe も xiiimp.so も libiiimcf.so も libiiimp.so も全然メッセージなどを吐かない。タイミングを見計らって「メッセージを吐くような実装にしてください」っていうリクエストを出そう。
■ [ネタ] コンピュータの廃熱の有効利用