Связать функцию восстановления с соединением, чтобы сделать соединение HA-совместимым
#include <ha/cover.h>int ha_attach( int coid,RFp rfn,void *rhdl,unsigned flags );
<ha/types.h>
: typedef int (*RFp)( int coid,void *rhdl );
libha
Функция ha_attach() связывает функцию восстановления с соединением, чтобы сделать соединение coid HA-совместимым. Если какая-либо операция над соединением coid возвращает ошибку EBADF
, будет вызвана функция восстановления, на которую указывает rfn.
Функция восстановления rfn будет вызываться с rhdl в качестве параметра. Параметр rhdl — это непрозрачный дескриптор данных, которые будут интерпретироваться и использоваться функцией восстановления. Ожидается, что функция восстановления выполнит восстановление существующего соединения для конкретного клиента.
Функция восстановления возвращает идентификатор соединения, связанный с восстановленным соединением. Этот идентификатор соединения должен быть таким же, как тот, который не удалось ранее установить. Клиент может выбрать любой удобный для него способ восстановления.
Клиент может повторно подключиться к тому же серверу (если служба доступна), а затем вернуться в свое состояние по отношению к соединению с точки зрения клиента.
Клиент также может повторно подключиться к новому серверу. Функция восстановления клиента должна возвращать тот же идентификатор соединения, чтобы сообщить об успешном восстановлении библиотеке HA, чтобы библиотека могла повторно инициировать предыдущую неудачную операцию с соединением.
Если клиент не желает или не может восстановиться, он может вернуть библиотеке -1
. Библиотека затем немедленно возвращает ошибку, связанную с неудачной операцией соединения, вызывающей стороне. Для удобства, библиотека HA предоставляет вызовы ha_reopen() и ha_ReConnectAttach(), которые закрывают старое соединение и соответствующим образом получают новое соединение. Следует вызывать ha_attach() после того, как соединение установлено и доступен корректный coid.
Другой способ сделать соединение HA-совместимым — это вызвать вспомогательные функции ha_open(), ha_creat64(), ha_ConnectAttach_r() или ha_fopen().
HAREPLACERECOVERYFN
, но нет HA-совместимого соединения coid. HAREPLACERECOVERYFN
не установлен. ЗОСРВ «Нейтрино»
ha_close(), ha_detach(), ha_ConnectAttach(), ha_ConnectDetach(), ha_creat(), ha_fclose(), ha_fopen(), ha_open(), ha_ReConnectAttach(), ha_reopen()
Предыдущий раздел: Менеджер высокой готовности (HAM)