Ответить клиенту сообщением
#include <sys/resmgr.h>int resmgr_msgreply( resmgr_context_t *ctp,void *ptr,int len );
libc
Цель использования resmgr_msgreply() вместо использования MsgReply() состоит в том, что resmgr_msgreply() поддерживает обратный порядок байт стандартных типов сообщений resmgr, тогда как MsgReply() - нет. Функция resmgr_msgreply() является оберткой над MsgReply() и предоставляет тот же функционал. Вызов resmgr_msgreply() отвечает сообщением потоку, идентифицированному ctp->rcvid. Эта функция вызывается сервером для ответа клиенту. Клиентский поток уже должен находиться в состоянии REPLY. Ответный поток должен быть заблокирован в состоянии REPLY. Любой поток в процессе получения может ответить на сообщение; однако на него можно ответить только один раз для каждого приема.
![]() | Можно заполнить буфер ответа клиента по мере того, как данные становятся доступными, используя resmgr_msgwrite() и resmgr_msgwritev(); однако тогда необходимо будет использовать resmgr_msgpeply() или resmgr_msgpeplyv(), чтобы разблокировать клиента.
Функции, имена которых содержат суффикс «v», поддерживают составные сообщения. |
Данные берутся из массива буферов сообщений, на который указывает ptr. Количество элементов в этом массиве задается параметром len. Размер сообщения - это сумма размеров каждого буфера.
Количество переданных байт - это минимальное количество байт, указанное как отвечающей стороной, так и отправителем. Данные ответа не могут переполнять область буфера ответа, предоставленную отправителем.
Передача данных происходит немедленно, и отвечающий поток не блокируется. Нет необходимости отвечать на полученные сообщения в каком-либо определенном порядке, но следует в конечном итоге отвечать на каждое сообщение, чтобы разрешить отправляющему потоку(-ам) продолжить выполнение.
Отсутствуют. В сети могут выполняться потоки с более низким приоритетом.
Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
ЗОСРВ «Нейтрино»
resmgr_msgwrite(), resmgr_msgwritev(), resmgr_context_t, resmgr_msgread(), resmgr_msgreadv(), resmgr_msgwritev(), MsgWrite(), MsgReplyv(), MsgReceive(), MsgReceivev(), MsgReply(), MsgSend(), MsgSendv()
Предыдущий раздел: Описание API системной библиотеки