Comment utiliser getnameinfo au lieu de gethostbyname?

dans le code :

if ((host = (struct hostent*) gethostbyname(address) ) == 0) //address is a string

J'ai avertissement lors de la compilation croisée (générique d'architecture arm) sur 4.5.x gcc :

(.text+0x1558): warning: gethostbyname is obsolescent, use getnameinfo() instead.

getnameinfo est:

int WSAAPI getnameinfo(
  __in   const struct sockaddr FAR *sa,
  __in   socklen_t salen,
  __out  char FAR *host,
  __in   DWORD hostlen,
  __out  char FAR *serv,
  __in   DWORD servlen,
  __in   int flags
);

Et il a obtenu plus de paramètres... Et je suis confondue avec elle, j'ai juste besoin de fonctionner comme gethostbyname. Qu'est-ce paramètre à passer à keep it simple stupid, comme c'était avec gethostbyname?

Enfin, voici mon essai:

struct sockaddr_in servAddr;
struct hostent *host;        /* Structure containing host information */

/* open socket */
if ((handle = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
    return LILI_ERROR;

memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family      = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(address.ptr());
servAddr.sin_port        = htons(port);

char servInfo[NI_MAXSERV];
if ( ( host = (hostent*) getnameinfo(
                 (struct sockaddr *) &servAddr
                 ,sizeof (struct sockaddr)
                 ,address.ptr(), address.size()
                 ,servInfo, NI_MAXSERV
                 ,NI_NUMERICHOST | NI_NUMERICSERV )  ) == 0)
    return LILI_ERROR;

if (::connect(handle, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0)
    return LILI_ERROR;

Il compile bien et pas d'erreur de segmentation sur démarrer, mais je ne peux pas me connecter à mon serveur 🙁

Que vous avez marqué à la question de la c++, je vous suggère d'utiliser boost.asio.
Je vous remercie. mais pourtant, je ne veux pas toucher boost. Mais je pense qu'il n'y a aucune raison de ne pas utiliser boost, donc je pense que je vais prendre un coup d'oeil.
google.com/... Numéro 3.
Vous êtes à l'aide de la valeur de retour, en supposant qu'il est titulaire du nom de domaine, mais ce n'est pas correct. J'ai fait un edit de mon répondre à cette question.

OriginalL'auteur Cynede | 2012-04-27