MsgError(), MsgError_r()

Разблокировать клиента и установить для него статус ошибки

Прототип:

#include <sys/neutrino.h>
int MsgError( int rcvid,
int error );
int MsgError_r( int rcvid,
int error );

Аргументы:

rcvid
Идентификатор сообщения, возвращаемый потоку-серверу функцией MsgReceivev*() при приеме сообщения.
error
Код ошибки, который необходимо отправить клиенту.

Библиотека:

libc

Описание:

Функции MsgError() и MsgError_r() выполняют разблокирование клиента, вызвавшего MsgSend*(), и устанавливают errno клиента в значение error. При это передача данных не осуществляется.

Если error имеет значение EOK, то функция MsgSend*() возвращиет EOK; Если error имеет любое другое значение, то функция MsgSend*() возращает -1.

Данные функции идентичны за исключением способа возврата ошибок.


Note: Если задать код ошибки ERESTART, то отправитель немедленно выполнит повторный вызов MsgSend*(). Поскольку буферы отправки (send) и ответа (reply), передаваемые в MsgSend() могут перекрывать друг друга, не следует использовать ERESTART после вызова MsgWrite().

Состояния блокировки:

Отсутствует. В случае сетевого взаимодействия может получить управление поток с меньшим приоритетом.

Сетевые взаимодействия

MsgError() имеет повышенную задержку при сетевом взаимодействии, поскольку в этом случае сервер записывает код ошибки в свой локальный lsm-qnet.so, который затем должен взаимодействовать с клиентским lsm-qnet.so для реальной передачи кода ошибки.

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

MsgError()
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.
MsgError_r()
EOK возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.

Коды ошибок:

ESRCH
Поток, ассоциированный с rcvid не существует.

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

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

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

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

ChannelCreate(), MsgRead(), MsgReadv(), MsgReceive(), MsgReceivev(), MsgSend(), MsgSendv(), MsgWrite()




Предыдущий раздел: Описание API системной библиотеки