Программа сервера, использующая упрощенный интерфейс, достаточно простая. Она вызывает rpc_reg(), чтобы зарегистрировать процедуру, которая будет вызвана, а затем вызывает svc_run() - диспетчера удаленных процедур библиотеки RPC, который ждет входящих запросов.
Прототип rpc_reg() представлен ниже:
/* Номер программы сервера */
u_long prognum,
/* Номер версии сервера */
u_long versnum,
/* Номер процедуры сервера */
u_long procnum,
/* Имя удаленной функции */
char *procname,
/* Фильтр для кодирования аргумента arg */
xdrproc_t inproc,
/* Фильтр декодирования результата*/
xdrproc_t outproc,
/* Выбор транспортной службы */)
char *nettype;
Функция svc_run() вызывает сервисные процедуры в ответ на вызовы RPC. Диспетчер в rpc_reg() заботится о расшифровывании аргументов удаленных процедур и о зашифровывании результатов, с использованием фильтров XDR, определенных при регистрации удаленной процедуры.
Некоторые замечания относительно программы сервера:
#include <rpc/rpc.h>
#include <rpcsvc/rusers.h>
void *rusers();
main()
{
if(rpc_reg(RUSERSPROG, RUSERSVERS,
RUSERSPROC_NUM, rusers,
xdr_void, xdr_u_long,
"visible") == -1) {
fprintf(stderr, "Невозможно зарегистрировать\n");
exit(1);
}
svc_run(); /* Процедура без возврата */
fprintf(stderr, "Ошибка: Выход из svc_run!\n");
exit(1);
}
rpc_reg() можно вызвать сколько угодно раз, чтобы зарегистрировать все различные программы, версии, и процедуры.