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

Function loop

example/main_zc.c:138–232  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

136struct ff_zc_mbuf zc_buf;
137
138int loop(void *arg)
139{
140 /* Wait for events to happen */
141 unsigned nevents = ff_kevent(kq, NULL, 0, events, MAX_EVENTS, NULL);
142 unsigned i;
143
144 buf_len = sizeof(html) - 1;
145 buf_tmp = html;
146
147 for (i = 0; i < nevents; ++i) {
148 struct kevent event = events[i];
149 int clientfd = (int)event.ident;
150
151 /* Handle disconnect */
152 if (event.flags & EV_EOF) {
153 /* Simply close socket */
154 ff_close(clientfd);
155#ifdef INET6
156 } else if (clientfd == sockfd || clientfd == sockfd6) {
157#else
158 } else if (clientfd == sockfd) {
159#endif
160 int available = (int)event.data;
161 do {
162 int nclientfd = ff_accept(clientfd, NULL, NULL);
163 if (nclientfd < 0) {
164 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_accept failed:%d, %s\n", errno,
165 strerror(errno));
166 break;
167 }
168
169 /* Add to event list */
170 EV_SET(&kevSet, nclientfd, EVFILT_READ, EV_ADD, 0, 0, NULL);
171
172 if(ff_kevent(kq, &kevSet, 1, NULL, 0, NULL) < 0) {
173 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_kevent error:%d, %s\n", errno,
174 strerror(errno));
175 return -1;
176 }
177
178 available--;
179 } while (available);
180 } else if (event.filter == EVFILT_READ) {
181 char buf[256];
182 size_t readlen = ff_read(clientfd, buf, sizeof(buf));
183#ifdef FSTACK_ZC_SEND
184 int ret = ff_zc_mbuf_get(&zc_buf, buf_len);
185 if (ret < 0) {
186 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_APP, "ff_zc_mbuf_get failed, len:%d, errno:%d, %s\n", buf_len, errno, strerror(errno));
187 exit(1);
188 }
189
190 /* APP can call ff_zc_mbuf_write multi times */
191 int len_part = 1440, off, to_write_len;
192 for (off = 0; off < buf_len;){
193 to_write_len = (buf_len - off) > len_part ? len_part : (buf_len - off);
194 ret = ff_zc_mbuf_write(&zc_buf, (const char *)buf_tmp + off, to_write_len);
195 if (ret != to_write_len) {

Callers

nothing calls this directly

Calls 9

ff_keventFunction · 0.85
ff_closeFunction · 0.85
ff_acceptFunction · 0.85
ff_logFunction · 0.85
ff_readFunction · 0.85
ff_zc_mbuf_getFunction · 0.85
ff_zc_mbuf_writeFunction · 0.85
ff_writeFunction · 0.85
memcpyFunction · 0.50

Tested by

no test coverage detected