epoll+マルチプロセスサーバモデル|C++

1645 ワード

複数のプロセスが1つのポートを同時に傍受し、外部に接続がある場合、複数のプロセスがカーネルによって実現される競合メカニズムによって、1つが起動されます.
直接コード:
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
", buf); else // ret <= 0 { close(p->data.fd); } } } } } if(isParent) { for(int i=0; i