vcl: basic support for epoll level-triggered evts
[vpp.git] / src / plugins / hs_apps / vcl / sock_test_server.c
index 843d80e..d516c17 100644 (file)
@@ -284,13 +284,15 @@ new_client (void)
     stfail ("new_client accept()");
 
   stinf ("Got a connection -- fd = %d (0x%08x)!\n", client_fd, client_fd);
+  if (fcntl (client_fd, F_SETFL, O_NONBLOCK) < 0)
+    stfail ("fcntl()");
 
   conn->fd = client_fd;
 
   struct epoll_event ev;
   int rv;
 
-  ev.events = EPOLLIN;
+  ev.events = EPOLLET | EPOLLIN;
   ev.data.u64 = conn - ssm->conn_pool;
   rv = epoll_ctl (ssm->epfd, EPOLL_CTL_ADD, client_fd, &ev);
 
@@ -327,7 +329,7 @@ socket_server_echo_af_unix_init (sock_server_main_t * ssm)
   if (rv < 0)
     stfail ("echo_af_unix_init listen()");
 
-  ssm->af_unix_listen_ev.events = EPOLLIN;
+  ssm->af_unix_listen_ev.events = EPOLLET | EPOLLIN;
   ssm->af_unix_listen_ev.data.u32 = SOCK_TEST_AF_UNIX_ACCEPT_DATA;
   rv = epoll_ctl (ssm->epfd, EPOLL_CTL_ADD, ssm->af_unix_listen_fd,
                  &ssm->af_unix_listen_ev);
@@ -540,7 +542,7 @@ main (int argc, char **argv)
   if (ssm->epfd < 0)
     stfail ("main epoll_create()");
 
-  ssm->listen_ev.events = EPOLLIN;
+  ssm->listen_ev.events = EPOLLET | EPOLLIN;
   ssm->listen_ev.data.u32 = ~0;
 
   rv = epoll_ctl (ssm->epfd, EPOLL_CTL_ADD, ssm->listen_fd, &ssm->listen_ev);