📄 math_server.c
字号:
#include "math.h"
#include <stdio.h>
#include <stdlib.h>
#include <rpc/pmap_clnt.h>
#include <string.h>
#include <memory.h>
#include <sys/socket.h>
#include <netinet/in.h>
#ifndef SIG_PF
#define SIG_PF void(*)(int)
#endif
static void
math_prog_2(struct svc_req *rqstp, register SVCXPRT *transp)
{
union
{
struct MATH math_proc_2_arg;
} argument;
char *result;
xdrproc_t _xdr_argument, _xdr_result;
char *(*local)(char *, struct svc_req *);
switch (rqstp->rq_cred.oa_flavor)
{
case AUTH_NONE:
printf("The AUTH style is AUTH_NONE\n");
break;
case AUTH_SYS:
printf("The AUTH style is AUTH_SYS\n");
break;
case AUTH_SHORT:
printf("The AUTH style is AUTH_SHORT\n");
break;
case AUTH_DEST:
printf("The AUTH style is AUTH_DEST\n");
break;
default:
break;
}
switch (rqstp->rq_proc)
{
case NULLPROC:
(void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
return;
case MATH_PROC:
_xdr_argument = (xdrproc_t) xdr_MATH;
_xdr_result = (xdrproc_t) xdr_MATH;
local = (char *(*)(char *, struct svc_req *)) math_proc_2_svc;
break;
default:
svcerr_noproc (transp);
return;
}
memset ((char *)&argument, 0, sizeof (argument));
if (!svc_getargs (transp, _xdr_argument, (caddr_t) &argument))
{
svcerr_decode (transp);
return;
}
result = (*local)((char *)&argument, rqstp);
if (result != NULL && !svc_sendreply(transp, _xdr_result, result))
{
svcerr_systemerr (transp);
}
if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument))
{
fprintf (stderr, "unable to free arguments");
exit (1);
}
return;
}
int
main (int argc, char **argv)
{
register SVCXPRT *transp;
pmap_unset (MATH_PROG, MATH_VER);
transp = svcudp_create(RPC_ANYSOCK);
if (transp == NULL)
{
fprintf (stderr, "cannot create udp service.");
exit(1);
}
if (!svc_register(transp, MATH_PROG, MATH_VER,
math_prog_2, IPPROTO_UDP))
{
fprintf (stderr, "unable to register (MATH_PROG,
MATH_VER, udp).");
exit(1);
}
transp = svctcp_create(RPC_ANYSOCK, 0, 0);
if (transp == NULL)
{
fprintf (stderr, "cannot create tcp service.");
exit(1);
}
if (!svc_register(transp, MATH_PROG, MATH_VER,
math_prog_2, IPPROTO_TCP))
{
fprintf (stderr, "unable to register (MATH_PROG,
MATH_VER, tcp).");
exit(1);
}
svc_run ();
fprintf (stderr, "svc_run returned");
exit (1);
/* NOTREACHED */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -