проблема использования gethostbyname в исходном коде webench - PullRequest
0 голосов
/ 11 декабря 2018

исходный код здесь

inaddr = inet_addr(host);
if (inaddr != INADDR_NONE)
    memcpy(&ad.sin_addr, &inaddr, sizeof(inaddr));
else
{
    hp = gethostbyname(host);
    if (hp == NULL)
        return -1;
    //does not have h_addr member
    memcpy(&ad.sin_addr, hp->h_addr, hp->h_length);
}

Я новичок в сетевом программировании, один из моих друзей сказал мне, чтобы я прочитал код webench, чтобы научиться основному использованию., find struct hostent не имеет члена h_addr, в книге пример показывает, что h_aliases и h_addrtype являются указателями на указатели, что означает, что мы можем использовать это следующим образом:

#include    "unp.h"

int
main(int argc, char **argv)
{
    char            *ptr, **pptr;
    char            str[INET_ADDRSTRLEN];
    struct hostent  *hptr;

    while (--argc > 0) {
        ptr = *++argv;
        if ( (hptr = gethostbyname(ptr)) == NULL) {
            err_msg("gethostbyname error for host: %s: %s",
                    ptr, hstrerror(h_errno));
            continue;
        }
        printf("official hostname: %s\n", hptr->h_name);

        for (pptr = hptr->h_aliases; *pptr != NULL; pptr++)
            printf("\talias: %s\n", *pptr);

        switch (hptr->h_addrtype) {
        case AF_INET:
            pptr = hptr->h_addr_list;
            for ( ; *pptr != NULL; pptr++)
                printf("\taddress: %s\n",
                    Inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
            break;

        default:
            err_ret("unknown address type");
            break;
        }
    }
    exit(0);
}

Как я могу изменить эточтобы исправить код, поскольку h_addr_list может иметь более одного ipaddr, это значение следует скопировать в ad.sin_addr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...