Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Тестовые примеры / ch12 / test_rpc / test_svc
.C#include "RPC.h"
#include "test.h"
RPC_svc *svc1p, *svc2p, *svc3p;
/* RPC function: progno=1, vers=1, proc_no=1 */
int func1_1_1 (SVCXPRT* xprt) {
cerr << "func1_1_1 called\n";
svc1p->reply(xprt, (xdrproc_t)xdr_void, 0);
return RPC_SUCCESS;
}
/* RPC function: progno=1, vers=1, proc_no=2 */
int func1_1_2 (SVCXPRT* xprt) {
cerr << "func1_1_2 called\n";
svc1p->reply(xprt, (xdrproc_t)xdr_void, 0);
return RPC_SUCCESS;
}
/* RPC function: progno=1, vers=2, proc_no=1 */
int func1_2_1 (SVCXPRT* xprt) {
cerr << "func1_2_1 called\n";
svc2p->reply(xprt, (xdrproc_t)xdr_void, 0);
return RPC_SUCCESS;
}
/* RPC function: progno=2, vers=1, proc_no=1 */
int func2_1_1 (SVCXPRT* xprt) {
cerr << "func2_1_1 called\n";
svc3p->reply(xprt, (xdrproc_t)xdr_void, 0);
return RPC_SUCCESS;
}
/* syntax: test_rpc [-s] [<nettype>] */
int main(int argc, char* argv[])
{
char* nettype = (argc>1) ? argv[1] : "netpath";
/* create server handle for prog_no=1, vers=1 */
svc1p = new RPC_svc ( PROG1NUM, VERS1NUM, nettype );
/* create server handle for prog_no=1, vers=2 */
svc2p = new RPC_svc ( PROG1NUM, VERS2NUM, nettype );
/* create server handle for prog_no=2, vers=1 */
svc3p = new RPC_svc ( PROG2NUM, VERS1NUM, nettype );
if (!svc1p->good() || !svc2p->good() || !svc3p->good()) {
cerr << "create server handle(s) failed\n";
return 1;
}
/* register RPC functions with servers */
svc1p->add_proc( PROC1NUM, func1_1_1 );
svc1p->add_proc( PROC2NUM, func1_1_2 );
svc2p->add_proc( PROC1NUM, func1_2_1 );
svc3p->add_proc( PROC1NUM, func2_1_1 );
/* wait for clients' RPC requests for all servers */
RPC_svc::run();
return 0;
}