88#include <arpa/inet.h>
99#include <errno.h>
1010#include <assert.h>
11+ #include <sys/ioctl.h>
1112
1213#include "ff_config.h"
1314#include "ff_api.h"
@@ -25,7 +26,7 @@ int sockfd;
2526int sockfd6 ;
2627#endif
2728
28- char html [] =
29+ char html [] =
2930"HTTP/1.1 200 OK\r\n"
3031"Server: F-Stack\r\n"
3132"Date: Sat, 25 Feb 2017 09:26:33 GMT\r\n"
@@ -60,8 +61,14 @@ char html[] =
6061int loop (void * arg )
6162{
6263 /* Wait for events to happen */
63- unsigned nevents = ff_kevent (kq , NULL , 0 , events , MAX_EVENTS , NULL );
64- unsigned i ;
64+ int nevents = ff_kevent (kq , NULL , 0 , events , MAX_EVENTS , NULL );
65+ int i ;
66+
67+ if (nevents < 0 ) {
68+ printf ("ff_kevent failed:%d, %s\n" , errno ,
69+ strerror (errno ));
70+ return -1 ;
71+ }
6572
6673 for (i = 0 ; i < nevents ; ++ i ) {
6774 struct kevent event = events [i ];
@@ -98,27 +105,41 @@ int loop(void *arg)
98105 } while (available );
99106 } else if (event .filter == EVFILT_READ ) {
100107 char buf [256 ];
101- size_t readlen = ff_read (clientfd , buf , sizeof (buf ));
102-
103- ff_write (clientfd , html , sizeof (html ) - 1 );
108+ ssize_t readlen = ff_read (clientfd , buf , sizeof (buf ));
109+ ssize_t writelen = ff_write (clientfd , html , sizeof (html ) - 1 );
110+ if (writelen < 0 ){
111+ printf ("ff_write failed:%d, %s\n" , errno ,
112+ strerror (errno ));
113+ ff_close (clientfd );
114+ }
104115 } else {
105116 printf ("unknown event: %8.8X\n" , event .flags );
106117 }
107118 }
119+
120+ return 0 ;
108121}
109122
110123int main (int argc , char * argv [])
111124{
112125 ff_init (argc , argv );
113126
114- assert ((kq = ff_kqueue ()) > 0 );
127+ kq = ff_kqueue ();
128+ if (kq < 0 ) {
129+ printf ("ff_kqueue failed, errno:%d, %s\n" , errno , strerror (errno ));
130+ exit (1 );
131+ }
115132
116133 sockfd = ff_socket (AF_INET , SOCK_STREAM , 0 );
117134 if (sockfd < 0 ) {
118135 printf ("ff_socket failed, sockfd:%d, errno:%d, %s\n" , sockfd , errno , strerror (errno ));
119136 exit (1 );
120137 }
121138
139+ /* Set non blocking */
140+ int on = 1 ;
141+ ff_ioctl (sockfd , FIONBIO , & on );
142+
122143 struct sockaddr_in my_addr ;
123144 bzero (& my_addr , sizeof (my_addr ));
124145 my_addr .sin_family = AF_INET ;
@@ -167,7 +188,11 @@ int main(int argc, char * argv[])
167188 }
168189
169190 EV_SET (& kevSet , sockfd6 , EVFILT_READ , EV_ADD , 0 , MAX_EVENTS , NULL );
170- ff_kevent (kq , & kevSet , 1 , NULL , 0 , NULL );
191+ ret = ff_kevent (kq , & kevSet , 1 , NULL , 0 , NULL );
192+ if (ret < 0 ) {
193+ printf ("ff_kevent failed:%d, %s\n" , errno , strerror (errno ));
194+ exit (1 );
195+ }
171196#endif
172197
173198 ff_run (loop , NULL );
0 commit comments