FreeBSD上で
ruby -r socket -e 'p Socket.gethostbyname("210.251.121.214")'
が落ちる。理由はこの処理の内部でホスト情報を得るのに、 getaddrinfo(3)をserviceをNULLにして呼んでいるのだが、 FreeBSDでは、この呼び出しがエラーなく終了した後、結果のstruct addrinfoのai_canonnameがNULLだからだ。 flagsにはAI_CANONNAMEを指定している。
たぶん、呼び出し方が悪いのだと思うのだが、man getaddrinfoには
node パラメータと service パラメータのどちらかは NULL にしてよい (両方同時には不可)。
とあるので、許されると思うんだけどなあ。 昨日会った、ゆうぞうさんは「それは駄目だろう」っていうんだけど、 私にはいまいち理解できてない。
mallocにバグなし
という有名なことわざがあるので、間違っているのは自分である可能性はかなり高いのだが、 どう対応したらよいのかは不明だ。