Регистрации процедуры-сервера

Регистрация процедуры в качестве сервера на узле сети выполняется функцией registerrpc, имеющей следующий вид

#include <sys/types.h>

#include <rpc/rpc.h>

int registerrpc (prognum, vernum, procnum, procname,

inproc, outproc)

u_long prognum;

u_long vernum;

u_long procnum;

char *(*procname) ();

xdrproc_t inproc;

xdrproc_t outproc;

Аргументы prognum, vernum и procnum задают номера программы, версии и процедуры соответственно. Номера версии и процедуры назначаются программистом произвольно. Номер же программы, находящейся в стадии разработки, должен назначаться из диапазона 0x20000000...0x3fffffff.

Аргумент procname задает функцию языка программирования СИ, регистрируемую в качестве сервера. Эта функция (процедура) вызывается с указателем на ее аргумент и должна возвращать указатель на свой результат, располагаемый в статической или динамически выделенной (функциями malloc или calloc) памяти. Для хранения результата нельзя использовать автоматически выделяемую память (напоминаем, что локальные переменные функций располагаются именно в такой памяти).

Аргументы inproc и outproc задают XDR-функции преобразования, соответственно, аргумента и ее результата.

При успешном выполнении функция registerrpc возвращает 0, иначе - число "-1".

Диспетчеризация запросов к процедурам-серверам

Для приема запросов к процедурам-серверам от клиентов и диспетчеризации их используется функция svc_run, имеющая следующий вид

#include <rpc/rpc.h>

void svc_run ();

Не имеющая аргументов функция svc_run должна вызываться после регистрации всех диспетчируемых ею процедур-серверов. При успешном выполнении svc_run никогда не возвращает управление в вызвавшую ее программу.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: