⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 math_server.c

📁 linux 高级编程的例子源码,包括了本书上的所有代码
💻 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 + -