创建service socket

/*************************************************************************
> File Name: socketdemo.c
> Created Time: Mon 16 Jan 2017 11:59:11 AM CST
 ************************************************************************/


#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>


#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <poll.h>


int creatSocket(char* name)
{
    int SocketId = socket(AF_UNIX, SOCK_STREAM, 0);
    if (SocketId < 0) {
        printf("create SocketId failed!,errno=%d, %s \n", errno, strerror(errno ));
        close(SocketId);
        return -1;
    }


    struct sockaddr_un addr;
    bzero(&addr, sizeof(addr));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path, "service", sizeof(addr.sun_path)-1);
   
    if (bind(SocketId, (struct sockaddr*)&addr, sizeof(addr)) < 0)
    {
        printf("bind port failed:errno=%d, %s\n", errno, strerror(errno ));
        unlink(name);
        close(SocketId);
        return -1;
    }
    printf("addr.sun_path is %s \n", addr.sun_path);
    return SocketId;
    
}


int main()
{
    unlink("service");
    int serviceSocketId =creatSocket("service");
    printf("serviceSocketId = %d \n", serviceSocketId);


    //service can connext max clientSock number cant seen cat /proc/sys/net/core/somaxconn
    listen(serviceSocketId, 128);


    struct pollfd *fds = malloc(128*sizeof(struct pollfd));
    bzero(fds, sizeof(struct pollfd)*128);






    int poll_num = 1;
    fds[0].fd = serviceSocketId;
    fds[0].events = POLLIN;






    int endFlags = 1;


    while(endFlags)
    {
        int ret = poll(fds, 2, -1);


        if (ret < 0) {
//            printf("poll failed:errno=%d, %s\n", errno, strerror(errno ));
            continue;
        }


        if (fds[0].revents & POLLIN)
        {
            struct sockaddr_un ca;
            socklen_t ca_len;
            bzero(&ca, sizeof(ca));
            int new_fd = accept(fds[0].fd, (struct sockaddr*)&ca, &ca_len);
            printf("%s conneted. new_fd =%d \n", ca.sun_path, new_fd);
            fds[poll_num].fd = new_fd;
            fds[poll_num].events = POLLIN;
            poll_num ++;
        }
 
        int i = 1;
        for (i = 1; i < poll_num; i++) {
            if (fds[i].revents & POLLIN) {
                char buf[1024];
                bzero(buf, sizeof(buf));
                int ret = read(fds[i].fd, buf, sizeof(buf));


                if (ret == 0) {
                    close(fds[i].fd);
                    endFlags = 0;
                }
                else {
                    printf("receive buf : %s,ret =%d \n", buf, ret);
                    write(fds[i].fd, "OK\n", 3);
                }
            }
        }
    } 


    close(serviceSocketId);
    unlink("service");
   
    return 0;

}


To accept connections, the following steps are performed:


           1.  A socket is created with socket(2).


           2.  The socket is bound to a local address using bind(2), so that other sockets may be connect(2)ed to it.


           3.  A willingness to accept incoming connections and a queue limit for incoming connections are specified with listen().


           4.  Connections are accepted with accept(2).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值