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