gethostbyaddr слишком медленный
Я использую следующий код, результаты верны. Я работаю в локальной сети всего с 3 машинами. Также эта сеть не подключена к Интернету. Это займет 16 секунд только для этой линии
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
GetHostByName(PChar(HostName)); is instant (delphitricks.com/source-code/internet/…)
function IPAddrToName(IPAddr: string): string;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
WSAData: TWSAData;
begin
WSAStartup($101, WSAData);
SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr));
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
if HostEnt <> nil then
Result := StrPas(Hostent^.h_name)
else
Result := '';
end;
https://stackoverflow.com/questions/3446879/gethostbyaddr-too-slow
Результат ipcofig /all
(с машины, на которой запущен gethostbyaddr)
Конфигурация Windows IP Имя хоста.,,,,,,,,,,,: XXX Первичный DNS суффикс.,,,,,,: Тип узла.,,,,,,,,,,,: Неизвестно IP-маршрутизация включена.,,,,,,,: Нет WINS Proxy включен.,,,,,,,: Нет Ethernet-адаптер Local Area Connection: DNS-суффикс для конкретного подключения.: Описание.,,,,,,,,,,: Realtek RTL8139/810x Семейный сетевой адаптер Fast Ethernet Физический адрес.,,,,,,,,: 00-XX-XX-XX-XX-XX Dhcp включен.,,,,,,,,,,: Нет Айпи адрес.,,,,,,,,,,,: 192.168.1.123 Маска подсети.,,,,,,,,,,: 255.255.255.0 Шлюз по умолчанию.,,,,,,,,: 192.168.1.1 DNS-серверы.,,,,,,,,,,: 202.149.208.90 202.149.208.11
1 ответ
Возможно, у вас два DNS-сервера, и первый не работает, поэтому ваш компьютер с Windows ожидает тайм-аута от первого хоста (10+ с), а затем пытается второй DNS. Попробуйте сменить dns на что-то другое, например, на какой-нибудь общедоступный dns-сервис, и посмотрите, имеет ли это значение.