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