| | |
| | | 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)
|
| | |
| | | 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);
|
| | | }
|
| | |
|
| | |
| | | }
|
| | |
|
| | | 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));
|
| | |
| | | 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;
|
| | | }
|
| | |
| | | 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);
|
| | | }
|
| | | }
|