Chinaunix首页 | 论坛 | 博客
  • 博客访问: 597165
  • 博文数量: 50
  • 博客积分: 4764
  • 博客等级: 上校
  • 技术积分: 597
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-18 09:00
个人简介

资深IT码农,擅长Linux、C/C++、bash

文章分类

全部博文(50)

文章存档

2015年(17)

2014年(2)

2011年(7)

2010年(4)

2009年(20)

分类: LINUX

2015-03-11 17:30:03

在RPC中使用Unix Domain Socket

冷胜魁(Seaquester)
lengshengkui@outlook.com
2015-3-11

Linux下的RPC除了支持TCP和UDP两种通讯方式,还支持Unix Domain Socket。关于这方面的资料却不多,经过一番尝试,终于找到了正确的使用方式。下面将主要介绍和TCP/UDP方式的不同。

1. Server端

首先,需要调用svcunix_create来创建一个基于Unix Domain socket 的 RPC service transport。该函数的第一个参数sock必须是RPC_ANYSOCK,最后一个参数path是Unix Domain socket 的path(其实就是个文件路径)。

点击(此处)折叠或打开

  1. transp = svcunix_create(RPC_ANYSOCK, 0, 0, "/tmp/gettime_13579.sock");
  2. if (transp == NULL) {
  3.     fprintf (stderr, "%s", "cannot create rpc(unix) service.");
  4.     exit(1);
  5. }

然后,调用svc_register来注册,该函数最后一个参数 protocol 必须是0。

点击(此处)折叠或打开

  1. if (!svc_register(transp, GETTIME_PROG, GETTIME_VERSION, gettime_prog_1, 0)) {
  2.     printf("unable to register (GETTIME_PROG, GETTIME_VERSION, unix)\n");
  3.     exit(1);
  4. }

2. Client端

Client需要调用 clnt_create 创建一个RPC链接。带函数的第一个参数host不再是hostname,必须设置成Unix Domain Socket的path(和Server端必须一致)。最后一个参数proto必须设置成“unix”。

点击(此处)折叠或打开

  1. clnt = clnt_create("/tmp/gettime_13579.sock", GETTIME_PROG, GETTIME_VERSION, "unix");
  2. if (clnt == NULL) {
  3.     clnt_pcreateerror("clnt_create");
  4.     exit(1);
  5. }



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