APUE Learning Example Source Code
Guo Wenxue
2018-12-07 9e2354ec432f40e212e8d9ac54f1efb8567aef8b
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);
          } 
      }