Example #1
0
 /* main函数 */
 int main(int argc, const char *argv[])
 {
     if (argc < 3)
     {
         fprintf(stderr, "usage:%s ip_address port_number\n", argv[0]);
         exit(1);
     }
 
     int sockfd, epollfd, number;
 
     sockfd = create_socket(argv[1], atoi(argv[2]));
     struct epoll_event events[MAX_EPOLL_EVENTS];
 
     /* linux内核2.6.27版的新函数,和epoll_create(int size)一样的功能,并去掉了无用的size参数 */
     if ((epollfd = epoll_create1(0)) == -1)
         err_exit("epoll_create1() error");
 
     /* 以下设置是针对监听的sockfd,当epoll_wait返回时,必定有事件发生,
      * 所以这里我们忽略罕见的情况外设置阻塞IO没意义,我们设置为非阻塞IO */
 
     /* sockfd:非阻塞的LT模式 */
     //addfd_to_epoll(epollfd, sockfd, EPOLL_LT, FD_NONBLOCK);
 
     /* sockfd:非阻塞的ET模式 */
     addfd_to_epoll(epollfd, sockfd, EPOLL_ET, FD_NONBLOCK);
 
    
     while (1)
     {
         number = epoll_wait(epollfd, events, MAX_EPOLL_EVENTS, -1);
         if (number == -1)
             err_exit("epoll_wait() error");
         else
         {
             /* 以下的LT,ET,以及是否阻塞都是是针对accept()函数返回的文件描述符,即函数里面的connfd */
 
             /* connfd:阻塞的LT模式 */
             epoll_process(epollfd, events, number, sockfd, EPOLL_LT, FD_BLOCK);
 
             /* connfd:非阻塞的LT模式 */
             //epoll_process(epollfd, events, number, sockfd, EPOLL_LT, FD_NONBLOCK);
 
             /* connfd:阻塞的ET模式 */
             //epoll_process(epollfd, events, number, sockfd, EPOLL_ET, FD_BLOCK);
 
             /* connfd:非阻塞的ET模式 */
             //epoll_process(epollfd, events, number, sockfd, EPOLL_ET, FD_NONBLOCK);
         }
     }
 
     close(sockfd);
     return 0;
 }
Example #2
0
void CEpollMode::run()
{
    epoll_process();
}