APUE Learning Example Source Code
Guo Wenxue
2018-12-01 51ad692dbb0f4c1c45b3d8c8cb1e31e7d3191f36
update socket_server_epoll.c  program
1 files modified
12 ■■■■■ changed files
ch5_multiplexing/socket_server_epoll.c 12 ●●●●● patch | view | raw | blame | history
ch5_multiplexing/socket_server_epoll.c
@@ -99,7 +99,8 @@
    return -3;
    }
    event.events = EPOLLIN|EPOLLET;
    //event.events = EPOLLIN|EPOLLET;
    event.events = EPOLLIN;
    event.data.fd = listenfd;
    if( epoll_ctl(epollfd, EPOLL_CTL_ADD, listenfd, &event) < 0)
@@ -130,7 +131,7 @@
        if ( (event_array[i].events&EPOLLERR) || (event_array[i].events&EPOLLHUP) )
        {
        printf("epoll_wait get error on fd[%d]: %s\n", event_array[i].data.fd, strerror(errno));
        epoll_ctl(epollfd, EPOLL_CTL_ADD, event_array[i].data.fd, &event);
        epoll_ctl(epollfd, EPOLL_CTL_DEL, event_array[i].data.fd, NULL);
        close(event_array[i].data.fd);
        }
@@ -144,7 +145,8 @@
        }
        event.data.fd = connfd;
        event.events =  EPOLLIN|EPOLLET;
        //event.events =  EPOLLIN|EPOLLET;
        event.events =  EPOLLIN;
        if( epoll_ctl(epollfd, EPOLL_CTL_ADD, connfd, &event) < 0 )
        {
            printf("epoll add client socket failure: %s\n", strerror(errno));
@@ -158,7 +160,7 @@
                if( (rv=read(event_array[i].data.fd, buf, sizeof(buf))) <= 0)
        {
                    printf("socket[%d] read failure or get disconncet and will be removed.\n", event_array[i].data.fd);
            epoll_ctl(epollfd, EPOLL_CTL_ADD, event_array[i].data.fd, &event);
            epoll_ctl(epollfd, EPOLL_CTL_DEL, event_array[i].data.fd, NULL);
            close(event_array[i].data.fd);
            continue;
        }
@@ -173,7 +175,7 @@
                    if( write(event_array[i].data.fd, buf, rv) < 0 )
            {
                printf("socket[%d] write failure: %s\n", event_array[i].data.fd, strerror(errno));
                   epoll_ctl(epollfd, EPOLL_CTL_ADD, event_array[i].data.fd, &event);
                   epoll_ctl(epollfd, EPOLL_CTL_DEL, event_array[i].data.fd, NULL);
                   close(event_array[i].data.fd);
            } 
        }