Поддержка работы сокета LDAP
-
10-07-2019 - |
Вопрос
Мы используем клиентскую библиотеку OpenLDAP для подключения к LDAP-серверу.Проблема в том, что если в течение некоторого времени нет активности, сервер (или брандмауэр посередине) прерывает TCP-соединение.
Наша текущая реализация "keep-alive" просто время от времени выполняет поиск BaseDN - есть идеи получше?
Решение 3
Кажется, единственная альтернатива - это повторное соединение:
ldap_set_option( ld, LDAP_OPT_RECONNECT, LDAP_OPT_ON );
Другие советы
Отказ от LDAP может сработать:
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 и сервер не отвечает на запросы abandon, теоретически сервер проигнорирует запрос abandon для нулевого идентификатора msgid.Это обеспечило бы активность в TCP-сокете, предотвращая разрыв соединения брандмауэром.
Видишь:
- RFC 4511, Раздел 4.11:Отказаться от операции
- RFC 4511, Раздел 4.1.1.1:MessageId - сообщение
LDAP_OPT_RECONNECT
недоступен в OpenLdap