Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4065930
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: LINUX

2010-05-26 11:26:54

void

square_prog_2(char *host)

{

         CLIENT *clnt;

         enum clnt_stat retval_1;

         square_out result_1;

         square_in  squareproc_2_arg;

         squareproc_2_arg.arg = 11;

         clnt = clnt_create (host, square_prog, square_vers, "udp");

         if (clnt == NULL) {

                   clnt_pcreateerror (host);

                   exit (1);

         }

         retval_1 = squareproc_2(&squareproc_2_arg, &result_1, clnt);

         if (retval_1 != RPC_SUCCESS) {

                   clnt_perror (clnt, "call failed");

         }

         clnt_destroy (clnt);

         printf("%d\n", result_1.res);

}

 

bool_t

squareproc_2_svc(square_in *argp, square_out *result, struct svc_req *rqstp)

{

 

         result->res = argp->arg * argp->arg;

         printf("result = %d\n”, result->res);

         return TRUE;

}

 

以上代码为一个简单RPC程序调用的主体部分,RPC服务器端程序的返回值为bool类型(TRUE或者FALSE),正常结束时,RPC服务器应该返回TRUE,下面对于服务器不能正常完成服务的两种情况进行分析:

1.  在服务器实现中返回FALSE

Ÿ   如果客户端创建的句柄为udp类型,则每隔5sudp重传超时时间),服务器端的方法被重新调用,5次后,客户端提示超时(25s为总超时时间)。

Ÿ   如果客户端创建的句柄为tcp类型,则服务器方法被调用一次,客户端在25s后提示超时。

 

2.  服务器宕机或网络不通等

Ÿ   如果客户端创建的句柄为udp类型,则在创建句柄阶段不会出错(udp不需要建立连接),而在调用阶段会出错,提示call failedRPC: Unable to receiveerrno = Connection refused;

Ÿ   如果客户端创建的句柄为tcp类型,则在创建句柄阶段就会出错(tcp的三次握手),提示192.168.1.72RPC: Remote system error – Connection refused;

 

阅读(3379) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~