#include <stdio.h>
#include <rpc/rpc.h>
#include "windows.h"
void windowdispatch();
main()
{
int num;
num = svc_create(windowdispatch, WINDOWPROG, WINDOWVERS,
"CIRCUIT_V");
if (num == 0) {
fprintf(stderr, "can't create an RPC server¥n");
exit(1);
}
svc_run(); /* 戻らない */
fprintf(stderr, "should never reach this point¥n");
}
void
windowdispatch(rqstp, transp)
struct svc_req *rqstp;
SVCXPRT *transp;
{
char *s = NULL;
switch (rqstp->rq_proc) {
case NULLPROC:
if (!svc_sendreply(transp, xdr_void, 0))
fprintf(stderr, "can't reply to RPC call¥n");
return;
case RENDERSTRING:
if (!svc_getargs(transp, xdr_wrapstring, &s)) {
fprintf(stderr, "can't decode arguments¥n");
/* 呼び出し側にエラーを通知 */
svcerr_decode(transp);
break;
}
/* 文字列 s を処理するコード */
if (!svc_sendreply(transp, xdr_void, (caddr_t) NULL))
fprintf(stderr, "can't reply to RPC call¥n");
break;
case RENDERSTRING_BATCHED:
if (!svc_getargs(transp, xdr_wrapstring, &s)) {
fprintf(stderr, "can't decode arguments¥n");
/* プロトコルエラーのため何も返さない */
break;
}
/* 文字列 s を処理するコード。ただし応答はしない。 */
break;
default:
svcerr_noproc(transp);
return;
}
/* 引数の復号化で割り当てた文字列を解放 */
svc_freeargs(transp, xdr_wrapstring, &s);
}
|