MCPcopy Index your code
hub / github.com/F-Stack/f-stack / loop

Function loop

example/main.c:62–122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

60"</html>";
61
62int loop(void *arg)
63{
64 /* Wait for events to happen */
65 int nevents = ff_kevent(kq, NULL, 0, events, MAX_EVENTS, NULL);
66 int i;
67
68 if (nevents < 0) {
69 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kevent failed:%d, %s\n", errno,
70 strerror(errno));
71 return -1;
72 }
73
74 for (i = 0; i < nevents; ++i) {
75 struct kevent event = events[i];
76 int clientfd = (int)event.ident;
77
78 /* Handle disconnect */
79 if (event.flags & EV_EOF) {
80 /* Simply close socket */
81 ff_close(clientfd);
82#ifdef INET6
83 } else if (clientfd == sockfd || clientfd == sockfd6) {
84#else
85 } else if (clientfd == sockfd) {
86#endif
87 int available = (int)event.data;
88 do {
89 int nclientfd = ff_accept(clientfd, NULL, NULL);
90 if (nclientfd < 0) {
91 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_accept failed:%d, %s\n", errno,
92 strerror(errno));
93 break;
94 }
95
96 /* Add to event list */
97 EV_SET(&kevSet, nclientfd, EVFILT_READ, EV_ADD, 0, 0, NULL);
98
99 if(ff_kevent(kq, &kevSet, 1, NULL, 0, NULL) < 0) {
100 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kevent error:%d, %s\n", errno,
101 strerror(errno));
102 return -1;
103 }
104
105 available--;
106 } while (available);
107 } else if (event.filter == EVFILT_READ) {
108 char buf[256];
109 ssize_t readlen = ff_read(clientfd, buf, sizeof(buf));
110 ssize_t writelen = ff_write(clientfd, html, sizeof(html) - 1);
111 if (writelen < 0){
112 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_write failed:%d, %s\n", errno,
113 strerror(errno));
114 ff_close(clientfd);
115 }
116 } else {
117 ff_log(FF_LOG_WARNING, FF_LOGTYPE_FSTACK_APP, "unknown event: %8.8X\n", event.flags);
118 }
119 }

Callers

nothing calls this directly

Calls 6

ff_keventFunction · 0.85
ff_logFunction · 0.85
ff_closeFunction · 0.85
ff_acceptFunction · 0.85
ff_readFunction · 0.85
ff_writeFunction · 0.85

Tested by

no test coverage detected