Отправить ответ
#include <sys/neutrino.h>int MsgWrite( int rcvid,const void *msg,int size,int offset );int MsgWrite_r( int rcvid,const void *msg,int size,int offset );
libc
Функции MsgWrite() и MsgWrite_r() записывают данные в ответный буфер потока, идентифицированного rcvid. Клиент должен находиться в REPLY-блокированном состоянии. Выполнять запись может любой поток процесса-сервера.
Данные функции идентичны за исключением способа возврата ошибок.
Эти функции используются в следующих ситуациях:
Для завершения обмена данными необходимо вызвать MsgReply*(), чтобы разблокировать REPLY-блокированного клиента. При этом ответное сообщение не должно содержать данные, поскольку они будут записаны в ответный буфер клиента со смещением. Это удобно для записи заголовка после того, как записаны все данные.
Использование одиночного вызова MsgReply*() эффективнее, чем использование вызовов MsgWrite() с последующим вызовом MsgReply*().
Отсутствуют. В случае сетевого взаимодействия может получить управление поток с меньшим приоритетом.
Функция MsgWrite() имеет повышенную задержку при сетевом взаимодействии, поскольку в этом случае сообщение передается от сервера к серверному сетевому менеджеру lsm-qnet.so
, который взаимодействует с клиентским lsm-qnet.so
для реальной передачи данных.
Передача данных от сервера к серверному сетевому менеджеру lsm-qnet.so
осуществляется эффективным образм, но, поскольку серверный lsm-qnet.so
не имеет способа определить размер приемного буфера клиента, MsgWrite() может возвращать неточное значение количества байт, отправленных сервером - возвращаемое значение может указывать количество байт, записанных сервером в свой lsm-qnet.so
.
Для сокращения сетевых транзакций сообщение буферезуется в серверном lsm-qnet.so
до вызова MsgReply*().
Для того, чтобы определить размер ответного буфера клиента, необходимо установить флаг _NTO_CHF_REPLY_LEN
при вызове ChannelCreate().
-1
, код ошибки записывается в errno.
ЗОСРВ «Нейтрино»
ChannelCreate(), MsgRead(), MsgReadv(), MsgReceive(), MsgReceivev(), MsgReply(), MsgReplyv(), MsgWritev()
Предыдущий раздел: Описание API системной библиотеки