EPoll: add handlers for close and timeout events
authorEduardo Silva <edsiper@gmail.com>
Wed, 25 Nov 2009 16:24:10 +0000 (13:24 -0300)
committerEduardo Silva <edsiper@gmail.com>
Wed, 25 Nov 2009 16:24:10 +0000 (13:24 -0300)
src/connection.c
src/epoll.c
src/include/connection.h
src/include/epoll.h
src/scheduler.c

index dd778ba..c502e73 100644 (file)
@@ -110,3 +110,22 @@ int mk_conn_error(int socket)
         return 0;
 }
 
+int mk_conn_close(int socket)
+{
+        struct sched_list_node *sched;
+
+        sched = mk_sched_get_thread_conf();
+        mk_sched_remove_client(&sched, socket);
+
+        return 0;
+}
+
+int mk_conn_timeout(int socket)
+{
+        struct sched_list_node *sched;
+
+        sched = mk_sched_get_thread_conf();
+        mk_sched_check_timeouts(&sched);
+
+        return 0;
+}
index fd20981..a19267b 100644 (file)
@@ -42,7 +42,9 @@
 
 mk_epoll_handlers *mk_epoll_set_handlers(void (*read)(void *),
                                          void (*write)(void *),
-                                         void (*error)(void *))
+                                         void (*error)(void *),
+                                         void (*close)(void *),
+                                         void (*timeout)(void *))
 {
        mk_epoll_handlers *handler;
 
@@ -50,7 +52,8 @@ mk_epoll_handlers *mk_epoll_set_handlers(void (*read)(void *),
        handler->read = (void *) read;
         handler->write = (void *) write;
         handler->error = (void *) error;
-
+        handler->close = (void *) close;
+        handler->timeout = (void *) timeout;
        return handler;
 }
 
@@ -105,7 +108,7 @@ void *mk_epoll_init(int efd, mk_epoll_handlers *handler, int max_events)
 
                         if(ret<0)
                         {
-                                mk_sched_remove_client(&sched, fd);
+                                (* handler->close)((void *) fd);
                         }
                 }
 
index 30b1238..df48252 100644 (file)
@@ -26,3 +26,5 @@ int mk_conn_switch_error(int socket);
 int mk_conn_read(int socket);
 int mk_conn_write(int socket);
 int mk_conn_error(int socket);
+int mk_conn_close(int socket);
+int mk_conn_timeout(int socket);
index 276ae61..13de2c0 100644 (file)
@@ -34,6 +34,8 @@ typedef struct {
         int (*read)(void *);
         int (*write)(void *);
         int (*error)(void *);
+        int (*close)(void *);
+        int (*timeout)(void *);
 } mk_epoll_handlers;
 
 int mk_epoll_create(int max_events);
@@ -41,7 +43,9 @@ void *mk_epoll_init(int efd, mk_epoll_handlers *handler, int max_events);
 
 mk_epoll_handlers *mk_epoll_set_handlers(void (*read)(void *),
                                          void (*write)(void *),
-                                         void (*error)(void *));
+                                         void (*error)(void *),
+                                         void (*close)(void *),
+                                         void (*timeout)(void *));
 
 int mk_epoll_add_client(int efd, int socket, int mode);
 int mk_epoll_socket_change_mode(int efd, int socket, int mode);
index 1ed0fa0..13a324d 100644 (file)
@@ -135,7 +135,9 @@ void *mk_sched_launch_epoll_loop(void *thread_conf)
        mk_epoll_handlers *handler;
        handler = mk_epoll_set_handlers((void *) mk_conn_read,
                                         (void *) mk_conn_write, 
-                                        (void *) mk_conn_error);
+                                        (void *) mk_conn_error,
+                                        (void *) mk_conn_close,
+                                        (void *) mk_conn_timeout);
 
         /* Nasty way to export task id */
         usleep(1000);