ha_attach()

Связать функцию восстановления с соединением, чтобы сделать соединение HA-совместимым

Прототип:

#include <ha/cover.h>
int ha_attach( int coid,
RFp rfn,
void *rhdl,
unsigned flags );

Аргументы:

coid
Идентификатор соединения.
rfn
Функция восстановления. Определяется в <ha/types.h>:
typedef int (*RFp)( int coid,
void *rhdl );
rhdl
Параметр функции восстановления.
flags
Флаги:
HAREPLACERECOVERYFN
Указывает, что вызов ha_attach() заменяет функцию восстановления. Функции восстановления можно заменять только в случае, если с соединением уже связана функция восстановления.

Библиотека:

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().

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EBADF
Соединение coid отсутствует, или установлен HAREPLACERECOVERYFN, но нет HA-совместимого соединения coid.
EEXIST
HA-совместимое соединение coid уже существует. Флаг HAREPLACERECOVERYFN не установлен.
ENOMEM
Не удалось выделить память при создании библиотечных структур.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

ha_close(), ha_detach(), ha_ConnectAttach(), ha_ConnectDetach(), ha_creat(), ha_fclose(), ha_fopen(), ha_open(), ha_ReConnectAttach(), ha_reopen()




Предыдущий раздел: Менеджер высокой готовности (HAM)