0

私はこのコードを持っています:

struct hostent *host;
struct hostent *serverHost;
if ((host = gethostbyname(param.ipadress)) == NULL)
{
  return -1;
}
if ((serverHost = gethostbyname(param.dnsserver)) == NULL)
{
  return -1;
}

そして今私が試しhost->h_addrてみると、からのアドレスが含まれていますparam.dnsserver。なにが問題ですか?私が間違っていることは何ですか?

4

1 に答える 1

4

gethostbynameおよびgethostbyaddr使用されなくなった古い関数です。

POSIX (2004)の説明については、次のとおりです。

gethostbyaddr() および gethostbyname() 関数は、静的データへのポインターを返す場合があります。これらのポインターは、これらの関数のいずれかへの後続の呼び出しによって上書きされる場合があります。

つまり、後続の呼び出しの前に、戻り値から必要な部分をコピーする必要があります。

さらに:

gethostbyaddr() および gethostbyname() 関数は、将来のバージョンで廃止される可能性があります。

実際、それらはもはや POSIX 2008 にはありません。

代替品は次のとおりです。

および関数はgetaddrinfo()getnameinfo()gethostbyaddr() および gethostbyname() 関数よりも優先されます。

于 2012-11-06T20:48:03.167 に答える