Здравствуйте.
Как я понимаю, если имени, передаваемо функции нет в хостах, то он обращается к DNS.
Компьютер подключён к интернету.
Соответственно, время ответа , что такого имени не существует оч большое.
Подскажите пожалуйста, как бы это время сократить?
Спасибо
.. gethostbyname(char *) в C
Время выполнения gethostbyname (определённо виснет при запросе к DNS :()
Модератор: Модераторы разделов
-
korisk
- Сообщения: 205
- ОС: Xubuntu
Время выполнения gethostbyname
Registerd Linux user #486684 at http://counter.li.org/
-
AestheteAnimus
- Сообщения: 135
- ОС: FreeBSD 8.0-RELEASE amd64
Re: Время выполнения gethostbyname
Во-первых, насколько я знаю, вместо функции gethostbyname рекомендуется использовать getaddrinfo. Хочется сразу прокричать, используйте таймауты! Но ни та, нт другая не имеют оного в качестве параметра. К тому же, обе они не являются системными вызовами, так что не будут прерываться сигналами непосредственно. Тем не менее, при помощи sigsetjmp/siglongjmp можно добиться желаемого эффекта.
Собственно, вот результат работы (хост, сервис, таймаут).
Когда все ресолвится:
и когда нет:
Код: Выделить всё
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <signal.h>
#include <unistd.h>
#include <setjmp.h>
static sigjmp_buf jmpbuf;
void sigalrm(int signo)
{
siglongjmp(jmpbuf, 1);
return;
}
int main(int argc, char** argv)
{
struct addrinfo *result = NULL;
char *hostname = argv[1];
char *service = argv[2];
int nsec = atoi(argv[3]); // Таймаут в секундах
signal(SIGALRM, sigalrm);
alarm(nsec);
if (sigsetjmp(jmpbuf, 1) != 0)
{
// пришли сюда по сигналу
printf("Timeouted\n");
return 0;
}
if (!getaddrinfo(hostname, service, NULL, &result))
printf("OK\n");
alarm(0);
signal(SIGALRM, SIG_IGN);
return 0;
}Собственно, вот результат работы (хост, сервис, таймаут).
Когда все ресолвится:
Код: Выделить всё
$ time ./testproj google.com domain 5
OK
real 0m0.007s
user 0m0.001s
sys 0m0.003sи когда нет:
Код: Выделить всё
$ time ./testproj googl.com domain 5
Timeouted
real 0m5.004s
user 0m0.002s
sys 0m0.003s-
korisk
- Сообщения: 205
- ОС: Xubuntu
Re: Время выполнения gethostbyname
Собственно, вот результат работы (хост, сервис, таймаут).
Когда все ресолвится:
Спасибо,
Здорово, конечно, но у меня эта функция используоется в мультитредовой програмке, поэтому с сигналами связываться не хотелось бы.
С уважением.
Registerd Linux user #486684 at http://counter.li.org/