gethostbyaddr muito lento

1

Eu uso o seguinte código, os resultados estão corretos. Estou trabalhando em LAN com apenas 3 máquinas. Além disso, essa rede não está conectada à internet. Demora 16 segundos para apenas esta linha

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;   

link

Resultado de ipcofig /all (da máquina rodando gethostbyaddr)

Windows IP Configuration

        Host Name . . . . . . . . . . . . : XXX
        Primary Dns Suffix  . . . . . . . : 
        Node Type . . . . . . . . . . . . : Unknown
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter Local Area Connection:

        Connection-specific DNS Suffix  . : 
        Description . . . . . . . . . . . : Realtek RTL8139/810x Family Fast Ethernet NIC
        Physical Address. . . . . . . . . : 00-XX-XX-XX-xx-XX
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 192.168.1.123
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.1
        DNS Servers . . . . . . . . . . . : 202.149.208.90
                                            202.149.208.11
    
por Allan Fernandes 10.08.2010 / 12:24

1 resposta

0

Pode ser que você tenha dois servidores dns e o primeiro não esteja funcionando, portanto a máquina do Windows aguarda o tempo limite do primeiro host (10 + segundos) e depois tenta o segundo dns. Tente mudar o DNS para outra coisa, como um serviço de DNS público e veja se isso faz diferença.

    
por 11.08.2010 / 15:42