• ベストアンサー

MSDNがgethostbynameではなくgetaddrinfoを使えと言うわけ

gethostbyname関数は無駄がなく思えるのですが、MSDNでは「これからはgetddrinfoを使っていけ」みたいなことをgethostbyname関数の説明に加えています。 gethostbyname関数もIPの長さは可変に対応してますよね? 何の都合があってgetaddrinfoを使わなければいけないのでしょうか。 getaddrinfoって、なんだかややこしい割に得られる情報が大したことない(他の手段で簡単に得られる)し、ai_canonnameなど、指定した情報がそのまま格納されるだけな気がしますが・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

最大の理由は、gethostbyname が返す領域のメモリが非常に扱いにくいからだったかと。 古いC言語の関数にありがちな一見簡単に使えるが危険も多い用法で、戻り値の格納領域を gethostbyname の内部で持つので、この領域の開放タイミングがライブラリ提供側には判断ができず。 ユーザ側での排他制御を前提としたり、必要に応じて結果をコピーする必要がでたり、スレッドセーフティ等の面で問題が見えてきたので、これが getaddrinfo が新しく策定された動機のはずです。

ggaogg
質問者

お礼

回答どうもありがとうございます。 あぁHOSTENT構造体は1つしか作成できないのに対してADDRINFO構造体はいくつでも作成可能というメリットはあるみたいですね。 でも、ソースを見るときに見にくいことは見にくいですよねぇ・・。

関連するQ&A

専門家に質問してみよう