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

Function loop

adapter/syscall/main_stack_epoll.c:68–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

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