为什么ldap_connect会变慢?

时间:2012-12-10 11:50:59

标签: delphi ldap

我使用Windows附带的WinLDAP.DLL连接到不同的LDAP服务器(1x OpenLDAP,1x Active Directory)。编程语言是Delphi,但它可能与此无关。

在使用服务器名称而不是IP地址时,在几个配置中,“ldap_connect”的调用非常慢(6-7秒)。 Ping或制作同一服务器的nslookup并不慢。为什么只有ldap连接速度慢?有什么东西我可以检查以确定问题吗?

编辑:WMware在我的计算机上安装了2个虚拟以太网适配器。如果我停用这些适配器,ldap_connect会快2-3倍。它并没有完全解决问题,但它可能有助于找到解释。

3 个答案:

答案 0 :(得分:1)

这几乎可以肯定是DNS配置错误。检查nslookup和反向查找时间。

答案 1 :(得分:1)

LDAP服务器正在执行reverse DNS lookup

的机会很棒

答案 2 :(得分:0)

我仍然不知道,如果我使用服务器名称而不是IP地址,为什么连接速度很慢。但是为了解决这个问题,我决定自己解析IP地址而不是让WINLDAP.dll这样做。

可以通过使用类似这样的函数来实现:

function GetIPAddress(const HostName: AnsiString): AnsiString;
var
  HostEnt: PHostEnt;
  Host: AnsiString;
  SockAddr: TSockAddrIn;
begin
  Result := '';
  Host := HostName;
  if Host = '' then
  begin
    SetLength(Host, MAX_PATH);
    GetHostName(PAnsiChar(Host), MAX_PATH);
  end;
  HostEnt := GetHostByName(PAnsiChar(Host));
  if HostEnt <> nil then
  begin
    SockAddr.sin_addr.S_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
    Result := inet_ntoa(SockAddr.sin_addr);
  end;
end;