«前の日記(2004年01月15日) 最新 次の日記(2004年01月17日)» 編集

Matzにっき


2004年01月16日 [長年日記]

_ [Ruby]getaddrinfo(3)

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にバグなし

という有名なことわざがあるので、間違っているのは自分である可能性はかなり高いのだが、 どう対応したらよいのかは不明だ。


«前の日記(2004年01月15日) 最新 次の日記(2004年01月17日)» 編集