epoll+多进程服务器模型 | C++

多个进程同时监听一个端口,如果外部有连接,多个进程通过内核实现的竞争机制,就会有一个被唤醒。

直接上代码:

int main()
{
    // 创建服务器
    int fd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(9988);
    addr.sin_addr.s_addr = INADDR_ANY;

    int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
    if(ret < 0)
    {
        perror("bind");
        return 1;
    }

    listen(fd, 20);

    int process_count = 20;
    int isParent = 1;
    for(int i=0; i 0)
        {
            for(int i=0; idata.fd == fd)
                {
                    int newfd = accept(fd, NULL, NULL);
                    ev.data.fd = newfd;
                    epoll_ctl(epollfd, EPOLL_CTL_ADD, newfd, &ev);
                }
                else
                {
                    char buf[1024];
                    int ret = recv(p->data.fd, buf, sizeof(buf), 0);
                    if(ret > 0)
                        printf("%s\n", buf);
                    else // ret <= 0
                    {
                        close(p->data.fd);
                    }
                }
            }
        }
    }

    if(isParent)
    {
        for(int i=0; i

你可能感兴趣的:(C/C++)