Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1050347
  • 博文数量: 166
  • 博客积分: 10217
  • 博客等级: 上将
  • 技术积分: 2133
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-09 19:45
文章分类

全部博文(166)

文章存档

2012年(3)

2011年(7)

2010年(18)

2009年(59)

2008年(79)

我的朋友

分类: LINUX

2008-06-13 11:51:03

#include
#include
#include
#include
#include
#include

#include
#include

#define GSMD_UNIX_SOCKET_TYPE    SOCK_STREAM

#define GSMD_UNIX_SOCKET "\0gsmd"

服务器端:
int usock_init(struct gsmd *g)
{
    struct sockaddr_un sun;
    int fd, rc;

    __ucmd_ctx = talloc_named_const(gsmd_tallocs, 1, "ucmd");
    __gu_ctx = talloc_named_const(gsmd_tallocs, 1, "gsmd_user");

    fd = socket(PF_UNIX, GSMD_UNIX_SOCKET_TYPE, 0);
    if (fd < 0)
        return fd;
   
    memset(&sun, 0, sizeof(sun));
    sun.sun_family = AF_UNIX;
    memcpy(sun.sun_path, GSMD_UNIX_SOCKET, sizeof(GSMD_UNIX_SOCKET));

    rc = bind(fd, (struct sockaddr *)&sun, sizeof(sun));
    if (rc < 0) {
        close(fd);
        return rc;
    }

    rc = listen(fd, 10);
    if (rc < 0) {
        close(fd);
        return rc;
    }

    g->gfd_sock.fd = fd;
    g->gfd_sock.when = GSMD_FD_READ | GSMD_FD_EXCEPT;
    g->gfd_sock.data = g;
    g->gfd_sock.cb = &gsmd_usock_cb;

    return gsmd_register_fd(&g->gfd_sock);
}

客户端:
static int lgsm_open_backend(struct lgsm_handle *lh, const char *device)
{
    int rc;

    if (!strcmp(device, LGSMD_DEVICE_GSMD)) {
        struct sockaddr_un sun;
       
        /* use unix domain socket to gsm daemon */
        lh->fd = socket(PF_UNIX, GSMD_UNIX_SOCKET_TYPE, 0);
        if (lh->fd < 0)
            return lh->fd;
       
        memset(&sun, 0, sizeof(sun));
        sun.sun_family = AF_UNIX;
        memcpy(sun.sun_path, GSMD_UNIX_SOCKET, sizeof(GSMD_UNIX_SOCKET));

        rc = connect(lh->fd, (struct sockaddr *)&sun, sizeof(sun));
        if (rc < 0) {
            close(lh->fd);
            lh->fd = -1;
            return rc;
        }
    } else    
        return -EINVAL;

    return 0;
}
这里客户端通过GSMD_UNIX_SOCKET的路径和服务器端匹配,只要是这个路径,服务器端发出的 数据,连接好的客户端都能收到,即广播式的
阅读(2304) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~