Мы используем клиентскую библиотеку OpenLDAP для подключения к серверу LDAP. Проблема в том, что если в течение некоторого времени нет активности, сервер (или межсетевой экран посередине) разрывает TCP-соединение.
Наша текущая реализация "keep-alive" просто время от времени выполняет поиск baseDN - есть ли лучшие идеи?
Почему? Не следует оставлять соединения LDAP открытыми.
Поскольку повторное открытие соединения может занять много времени - с аутентификацией, кластерными серверами и т. д.

Единственная альтернатива, кажется, переподключение:
ldap_set_option( ld, LDAP_OPT_RECONNECT, LDAP_OPT_ON );
LDAP_OPT_RECONNECT недоступен в OpenLdap
Отказ от 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, и сервер не отвечает на запросы отказа, теоретически сервер проигнорирует запрос отказа для нулевого идентификатора msgid. Это обеспечит активность TCP-сокета, не позволяя брандмауэру разорвать соединение.
Видеть:
C++, но кажется, что привязки к OpenLDAP очень похожи для большинства языков