LINUX.ORG.RU

gethostbyname


0

0

....
char			*ptr, **pptr;
....
	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);

pptr = hptr->h_addr_list;
for ( ; *pptr != NULL; pptr++)               /* В чем здесь проблема??
 printf("\taddress: %s\n",inet_ntoa(*pptr)); /*
....
....

по идее дожен в купе с именами распечатать все ip'шники...но имена получаем без вопросов, а адрес выдает совершенно левый, в чем проблема я понять не могу, наверно, это затуп...
★★

Ну, у inet_ntoa аргумент - не char *, а структура in_addr.
надо что-то вроде:
struct in_addr in;
in.s_addr = strtoul(*pptr,NULL,10);
А потом уже inet_ntoa. Только посмотри не нужен ли еще ntohl?

sabonez ★☆☆☆
()

<PATCH BEGIN>
....
char			*ptr, **pptr;
....
	struct hostent	*hptr;
+ char str[16];
<PATCH END>

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

<PATCH BEGIN>
pptr = hptr->h_addr_list;
for ( ; *pptr != NULL; pptr++)               /* В чем здесь проблема??
- printf("\taddress: %s\n",inet_ntoa(*pptr)); /*
+ printf("\taddress: %s\n",inet_ntop(AF_INET, *pptr, str, sizeof(str))); /*
....
....
<PATCH END>

anonymous
()
Ответ на: комментарий от anonymous

спасиб, действительно натутал с аргументами...

smooth ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.