Поддержка сокетов LDAP - PullRequest
2 голосов
/ 24 ноября 2008

Мы используем клиентскую библиотеку OpenLDAP для соединения с сервером LDAP. Проблема в том, что если в течение некоторого времени ничего не происходит, сервер (или межсетевой экран в середине) теряет TCP-соединение.

Наша текущая реализация "keep-alive" просто время от времени ищет baseDN - есть идеи получше?

Ответы [ 3 ]

2 голосов
/ 04 октября 2011

LDAP Abandon может работать:

if (ldap_abandon(ld, 0, sctrls, cctrls) != LDAP_SUCCESS)
    {
       /* handle ldap error */
    };

Об этом говорилось в списке рассылки OpenLDAP:

http://www.openldap.org/lists/openldap-devel/200905/msg00008.html

Вкратце: Запрос отмены отправляет сообщение на сервер, однако сервер не отправляет ответ клиенту для запросов отмены. Ноль не является допустимым MSGID для запросов LDAP. Так как ноль является недействительным MSGID и сервер не отвечает на запросы отмены, теоретически сервер будет игнорировать запрос отмены для ноля сообщения. Это обеспечит активность на сокете TCP, предотвращая разрыв соединения брандмауэром.

См:

  • RFC 4511, Раздел 4.11: Отказаться от операции
  • RFC 4511, раздел 4.1.1.1: MessageID

http://tools.ietf.org/html/rfc4511

1 голос
/ 07 апреля 2010

LDAP_OPT_RECONNECT недоступно в OpenLdap

0 голосов
/ 02 декабря 2008

Кажется, единственная альтернатива - переподключение:

ldap_set_option( ld, LDAP_OPT_RECONNECT, LDAP_OPT_ON );
...