Как использовать getnameinfo вместо gethostbyname?

в коде:

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

Я получил предупреждение при кросс-компиляции (общая архитектура arm )на 4.5.x gcc:

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

getnameinfo is:

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
);

И у него больше параметров... И я смущен этим, мне просто нужно, чтобы он работал, так как gethostbyname работал. Какой параметр передать, чтобы было просто глупо, как это было с gethostbyname?

Наконец, вот моя попытка:

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;

Он компилируется хорошо, при запуске нет ошибки сегментации, но я не могу подключить к нему свой сервер:(

15
задан Sebastian Dressler 27 April 2012 в 20:30
поделиться