fnet.c

Simple C networking library
git clone git://git.finwo.net/lib/fnet.c
Log | Files | Refs | README

commit f8f04bd973c52748e7cd9eaa8076d265d671fbdd
parent 2784d97b7daa9f0560934fb511474101e3bbaeb4
Author: Yersa Nordman <yersa@finwo.nl>
Date:   Wed,  2 Aug 2023 00:10:24 +0200

Added onTick support

Diffstat:
Msrc/fnet.c | 14+++++++++++---
Msrc/fnet.h | 5++++-
Mtest.c | 5+++++
3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/fnet.c b/src/fnet.c @@ -79,6 +79,7 @@ struct fnet_internal_t * _fnet_init(const struct fnet_options_t *options) { conn->flags = options->flags; conn->ext.onConnect = options->onConnect; conn->ext.onData = options->onData; + conn->ext.onTick = options->onTick; conn->ext.onClose = options->onClose; conn->nfds = 0; conn->fds = NULL; @@ -245,7 +246,6 @@ FNET_RETURNCODE fnet_process(const struct fnet_t *connection) { socklen_t addrlen = sizeof(addr); struct buf *rbuf = NULL; - // Checking arguments are given if (!conn) { fprintf(stderr, "fnet_process: connection argument is required\n"); @@ -289,6 +289,7 @@ FNET_RETURNCODE fnet_process(const struct fnet_t *connection) { })); } } + buf_clear(rbuf); free(rbuf); return FNET_RETURNCODE_OK; @@ -321,6 +322,7 @@ FNET_RETURNCODE fnet_process(const struct fnet_t *connection) { .flags = conn->flags & (~FNET_FLAG_RECONNECT), .onConnect = NULL, .onData = NULL, + .onTick = NULL, .onClose = NULL, .udata = NULL, })); @@ -457,6 +459,14 @@ FNET_RETURNCODE fnet_tick() { while(conn) { ret = fnet_process((struct fnet_t *)conn); if (ret < 0) return ret; + if (conn->ext.onTick) { + conn->ext.onTick(&((struct fnet_ev){ + .connection = (struct fnet_t *)conn, + .type = FNET_EVENT_TICK, + .buffer = NULL, + .udata = conn->ext.udata, + })); + } conn = conn->next; } return FNET_RETURNCODE_OK; @@ -487,8 +497,6 @@ FNET_RETURNCODE fnet_main() { return FNET_RETURNCODE_OK; } - - #ifdef __cplusplus } // extern "C" #endif diff --git a/src/fnet.h b/src/fnet.h @@ -35,7 +35,8 @@ extern "C" { #define FNET_EVENT int #define FNET_EVENT_CONNECT 1 #define FNET_EVENT_DATA 2 -#define FNET_EVENT_CLOSE 3 +#define FNET_EVENT_TICK 3 +#define FNET_EVENT_CLOSE 4 #define FNET_CALLBACK(NAME) void (*(NAME))(struct fnet_ev *event) @@ -51,6 +52,7 @@ struct fnet_t { FNET_STATUS status; FNET_CALLBACK(onConnect); FNET_CALLBACK(onData); + FNET_CALLBACK(onTick); FNET_CALLBACK(onClose); void *udata; }; @@ -60,6 +62,7 @@ struct fnet_options_t { FNET_FLAG flags; FNET_CALLBACK(onConnect); FNET_CALLBACK(onData); + FNET_CALLBACK(onTick); FNET_CALLBACK(onClose); void *udata; }; diff --git a/test.c b/test.c @@ -22,6 +22,10 @@ void onConnect(struct fnet_ev *ev) { ev->connection->onClose = onClose; } +void onTick(struct fnet_ev *ev) { + printf("tick\n"); +} + int main(int argc, const char *argv[]) { int i, n; @@ -89,6 +93,7 @@ int main(int argc, const char *argv[]) { .flags = 0, .onConnect = onConnect, .onData = NULL, + .onTick = onTick, .onClose = NULL, .udata = &mode, };