From: William Pitcock Date: Sat, 22 Dec 2007 22:05:51 +0000 (-0600) Subject: - add IOReadFunc and IOWriteFunc types. X-Git-Url: https://jfr.im/git/solanum.git/commitdiff_plain/868590746df471f97bfb59a4d26b6fd1078ee22d - add IOReadFunc and IOWriteFunc types. - add fde::read_impl, fde::write_impl. (defaults to read(2) and write(2) with raw FDs at the moment; this will be revised to act on the fde later.) --- diff --git a/libcharybdis/commio.c b/libcharybdis/commio.c index 14c9efaf..ac09126c 100644 --- a/libcharybdis/commio.c +++ b/libcharybdis/commio.c @@ -85,8 +85,12 @@ comm_add_fd(int fd) if (F != NULL) return F; - F = calloc(sizeof(fde_t), 1); + F = MyMalloc(sizeof(fde_t)); F->fd = fd; + + F->read_impl = read; + F->write_impl = write; + list = &fd_table[fd % FD_HASH_SIZE]; dlinkAdd(F, &F->node, list); diff --git a/libcharybdis/commio.h b/libcharybdis/commio.h index f7240609..3100e6f8 100644 --- a/libcharybdis/commio.h +++ b/libcharybdis/commio.h @@ -35,6 +35,10 @@ /* Callback for completed IO events */ typedef void PF(int fd, void *); +/* virtual function types for I/O --nenolod */ +typedef void IOFuncRead(int fd, void *buf, size_t count); +typedef void IOFuncWrite(int fd, const void *buf, size_t count); + /* Callback for completed connections */ /* int fd, int status, void * */ typedef void CNCB(int fd, int, void *); @@ -96,16 +100,24 @@ struct _fde fdlist_t list; /* Which list this FD should sit on */ int comm_index; /* where in the poll list we live */ char desc[FD_DESC_SZ]; + PF *read_handler; void *read_data; + PF *write_handler; void *write_data; + PF *timeout_handler; void *timeout_data; time_t timeout; + PF *flush_handler; void *flush_data; time_t flush_timeout; + + IOReadFunc *read_impl; + IOWriteFunc *write_impl; + struct DNSQuery *dns_query; struct {