Skip to content

Commit c7fe235

Browse files
author
logwang
committed
Example: keep run when accept failed.
1 parent f17ba62 commit c7fe235

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

example/main.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <stdio.h>
22
#include <stdlib.h>
33
#include <stdint.h>
4+
#include <string.h>
45
#include <strings.h>
56
#include <sys/types.h>
67
#include <sys/socket.h>
@@ -72,8 +73,10 @@ int loop(void *arg)
7273
//printf("A client has left the server...,fd:%d\n", clientfd);
7374
} else if (clientfd == sockfd) {
7475
int nclientfd = ff_accept(sockfd, NULL, NULL);
75-
76-
assert(nclientfd > 0);
76+
if (nclientfd < 0) {
77+
printf("ff_accept failed:%d, %s\n", errno, strerror(errno));
78+
continue;
79+
}
7780

7881
/* Add to event list */
7982
kevSet.data = 0;
@@ -145,5 +148,3 @@ int main(int argc, char * argv[])
145148
ff_run(loop, NULL);
146149
return 0;
147150
}
148-
149-

example/main_epoll.c

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -62,35 +62,39 @@ int loop(void *arg)
6262
int nevents = ff_epoll_wait(epfd, events, MAX_EVENTS, 0);
6363
int i;
6464

65-
for (i = 0; i < nevents; ++i) {
65+
for (i = 0; i < nevents; ++i) {
6666
/* Handle new connect */
6767
if (events[i].data.fd == sockfd) {
6868
int nclientfd = ff_accept(sockfd, NULL, NULL);
69-
assert(nclientfd > 0);
69+
if (nclientfd < 0) {
70+
printf("ff_accept failed:%d, %s\n", errno, strerror(errno));
71+
continue;
72+
}
73+
7074
/* Add to event list */
71-
ev.data.fd = nclientfd;
72-
ev.events = EPOLLIN;
73-
assert(ff_epoll_ctl(epfd, EPOLL_CTL_ADD, nclientfd, &ev) == 0);
74-
//fprintf(stderr, "A new client connected to the server..., fd:%d\n", nclientfd);
75+
ev.data.fd = nclientfd;
76+
ev.events = EPOLLIN;
77+
assert(ff_epoll_ctl(epfd, EPOLL_CTL_ADD, nclientfd, &ev) == 0);
78+
//printf("A new client connected to the server..., fd:%d\n", nclientfd);
7579
} else {
7680
if (events[i].events & EPOLLERR ) {
7781
/* Simply close socket */
78-
ff_epoll_ctl(epfd, EPOLL_CTL_DEL, events[i].data.fd, NULL);
82+
ff_epoll_ctl(epfd, EPOLL_CTL_DEL, events[i].data.fd, NULL);
7983
ff_close(events[i].data.fd);
80-
//fprintf(stderr, "A client has left the server...,fd:%d\n", events[i].data.fd);
84+
//printf("A client has left the server...,fd:%d\n", events[i].data.fd);
8185
} else if (events[i].events & EPOLLIN) {
8286
char buf[256];
8387
size_t readlen = ff_read( events[i].data.fd, buf, sizeof(buf));
84-
//fprintf(stderr, "bytes are available to read..., readlen:%d, fd:%d\n", readlen, events[i].data.fd);
85-
if(readlen > 0){
88+
//printf("bytes are available to read..., readlen:%d, fd:%d\n", readlen, events[i].data.fd);
89+
if(readlen > 0) {
8690
ff_write( events[i].data.fd, html, sizeof(html));
87-
} else {
88-
ff_epoll_ctl(epfd, EPOLL_CTL_DEL, events[i].data.fd, NULL);
89-
ff_close( events[i].data.fd);
90-
//fprintf(stderr, "A client has left the server...,fd:%d\n", events[i].data.fd);
91-
}
91+
} else {
92+
ff_epoll_ctl(epfd, EPOLL_CTL_DEL, events[i].data.fd, NULL);
93+
ff_close( events[i].data.fd);
94+
//printf("A client has left the server...,fd:%d\n", events[i].data.fd);
95+
}
9296
} else {
93-
fprintf(stderr, "unknown event: %8.8X\n", events[i].events);
97+
printf("unknown event: %8.8X\n", events[i].events);
9498
}
9599
}
96100
}
@@ -127,13 +131,11 @@ int main(int argc, char * argv[])
127131
printf("ff_listen failed\n");
128132
exit(1);
129133
}
130-
134+
131135
assert((epfd = ff_epoll_create(0)) > 0);
132136
ev.data.fd = sockfd;
133137
ev.events = EPOLLIN;
134138
ff_epoll_ctl(epfd, EPOLL_CTL_ADD, sockfd, &ev);
135139
ff_run(loop, NULL);
136140
return 0;
137141
}
138-
139-

0 commit comments

Comments
 (0)