MCPcopy Create free account
hub / github.com/F-Stack/f-stack / loop

Function loop

adapter/syscall/main_stack_epoll_kernel.c:71–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

69}
70
71void *loop(void *arg)
72{
73 /* Wait for events to happen */
74 while (!exit_flag) {
75 /*
76 * If not call alarm_event_sem, and epoll_wait timeout is 0,
77 * it can't exit normal, so timeout can't set to 0.
78 */
79 int nevents = epoll_wait(epfd, events, MAX_EVENTS, -1);
80 int i;
81
82 if (nevents <= 0) {
83 if (nevents) {
84 printf("hello world epoll wait ret %d, errno:%d, %s\n",
85 nevents, errno, strerror(errno));
86 break;
87 }
88 usleep(100);
89 //sleep(1);
90 }
91 //printf("get nevents:%d\n", nevents);
92
93 for (i = 0; i < nevents; ++i) {
94 /* Handle new connect */
95 if (events[i].data.fd == sockfd || events[i].data.fd == sockfd_kernel) {
96 while (1) {
97 int nclientfd = accept(events[i].data.fd, NULL, NULL);
98 printf("accept sockfd(_kernel):%d, nclientfd:%d, errono:%d/%s\n", events[i].data.fd, nclientfd, errno, strerror(errno));
99 if (nclientfd < 0) {
100 break;
101 }
102
103 /* Add to event list */
104 ev.data.fd = nclientfd;
105 ev.events = EPOLLIN;
106 if (epoll_ctl(epfd, EPOLL_CTL_ADD, nclientfd, &ev) != 0) {
107 printf("ff_epoll_ctl failed:%d, %s\n",
108 errno, strerror(errno));
109 close(nclientfd);
110 break;
111 }
112 if (events[i].data.fd == sockfd_kernel) {
113 break;
114 }
115 }
116 } else {
117 if (events[i].events & EPOLLERR ) {
118 /* Simply close socket */
119 epoll_ctl(epfd, EPOLL_CTL_DEL, events[i].data.fd, NULL);
120 close(events[i].data.fd);
121 } else if (events[i].events & EPOLLIN) {
122 char buf[256];
123 size_t readlen = read( events[i].data.fd, buf, sizeof(buf));
124 if(readlen > 0) {
125 size_t writelen = write( events[i].data.fd, html, sizeof(html) - 1);
126 if (writelen < 0){
127 printf("write failed, readlen:%lu, writelen:%lu, :%d, %s\n",
128 readlen, writelen, errno, strerror(errno));

Callers

nothing calls this directly

Calls 7

epoll_waitFunction · 0.85
epoll_ctlFunction · 0.85
printfFunction · 0.50
acceptFunction · 0.50
closeFunction · 0.50
readFunction · 0.50
writeFunction · 0.50

Tested by

no test coverage detected