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;
+}
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;
handler->read = (void *) read;
handler->write = (void *) write;
handler->error = (void *) error;
-
+ handler->close = (void *) close;
+ handler->timeout = (void *) timeout;
return handler;
}
if(ret<0)
{
- mk_sched_remove_client(&sched, fd);
+ (* handler->close)((void *) fd);
}
}
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);
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);
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);
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);