📄 math_server.c
字号:
#include "xdr_math.h"
static void mathprog(struct svc_req *rqstp,SVCXPRT *transp)
{
struct MATH math;
switch(rqstp->rq_proc)
{
case NULLPROC:
svc_sendreply(transp,(xdrproc_t)xdr_void,NULL);
return ;
case MATH_PROC:
break;
default:
svcerr_noproc(transp);
return ;
}
memset ((char *)&math, 0, sizeof (math));
if (!svc_getargs (transp, (xdrproc_t)xdr_math, (caddr_t) &math))
{
svcerr_decode (transp);
return;
}
switch(math.op)
{
case ADD:
math.result=math.arg1+math.arg2;
break;
case SUB:
math.result=math.arg1-math.arg2;
break;
case MUL:
math.result=math.arg1*math.arg2;
break;
case DIV:
math.result=math.arg1/math.arg2;
break;
default:
break;
}
if (!svc_sendreply(transp,(xdrproc_t)xdr_math,(caddr_t)&math))
{
printf ("error: unable to send reply");
exit (1);
}
if (!svc_freeargs (transp,(xdrproc_t) xdr_math, (caddr_t) &math))
{
printf ("error: unable to free arguments");
exit (1);
}
return ;
}
int main (int argc, char **argv)
{
register SVCXPRT *transp;
transp = svcudp_create(RPC_ANYSOCK);
if (transp == NULL)
{
printf ("error: cannot create udp service.");
exit(1);
}
if (!svc_register(transp, MATH_PROG, MATH_VER, mathprog, IPPROTO_UDP))
{
printf("error: unable to register (MATH_PROG, VER, udp).\n");
exit(1);
}
transp = svctcp_create(RPC_ANYSOCK, 0, 0);
if (transp == NULL)
{
printf ("error: cannot create tcp service.");
exit(1);
}
if (!svc_register(transp, MATH_PROG, MATH_VER, mathprog, IPPROTO_TCP))
{
printf ("error: unable to register (ADDPROG, VER, tcp).");
exit(1);
}
svc_run ();
printf ("error: svc_run returned");
exit (1);
/* NOTREACHED */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -