aboutsummaryrefslogtreecommitdiff
path: root/src/acceptor.c
diff options
context:
space:
mode:
authorGuangxiong Lin <[email protected]>2022-12-17 21:24:04 +0800
committerGuangxiong Lin <[email protected]>2022-12-17 21:53:40 +0800
commite339f2d269fcaffed7beed67c3995fe3b67393eb (patch)
treef1a94f746808d2e90023b0d0cdbc8307b5648f88 /src/acceptor.c
parent7bb3515bc303a2a35fe859bcdba2795fbe06643d (diff)
downloadtinyserver-e339f2d269fcaffed7beed67c3995fe3b67393eb.tar.gz
tinyserver-e339f2d269fcaffed7beed67c3995fe3b67393eb.tar.bz2
tinyserver-e339f2d269fcaffed7beed67c3995fe3b67393eb.zip
Support on_connect function in server libHEADmaster
Diffstat (limited to 'src/acceptor.c')
-rw-r--r--src/acceptor.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/acceptor.c b/src/acceptor.c
index ca7bfb4..2d883d1 100644
--- a/src/acceptor.c
+++ b/src/acceptor.c
@@ -13,6 +13,7 @@ struct conn_acceptor {
tsocket_t *sock;
evloop_t **evloops;
int nevloops;
+ connection_callback_func_t conn_callback_func;
};
conn_acceptor_t *conn_acceptor_create(tsocket_t *sock, evloop_t **evloops, int nevloops)
@@ -24,6 +25,7 @@ conn_acceptor_t *conn_acceptor_create(tsocket_t *sock, evloop_t **evloops, int n
acceptor->sock = sock;
acceptor->evloops = evloops;
acceptor->nevloops = nevloops;
+ acceptor->conn_callback_func = NULL;
return acceptor;
}
@@ -42,7 +44,7 @@ static void conn_acceptor_accept(conn_acceptor_t *ca)
return;
}
- event_t *conn_ev = connection_create_event(conn_sock);
+ event_t *conn_ev = connection_event_create(conn_sock, ca->conn_callback_func);
// TODO: Use a better way to decide which sub reactor to use.
int ind = conn_sock->fd % ca->nevloops;
@@ -55,18 +57,22 @@ static void conn_acceptor_accept(conn_acceptor_t *ca)
conn_sock->fd, conn_sock->addr, conn_sock->port);
}
-static void conn_acceptor_destroy(conn_acceptor_t *ca)
+void conn_acceptor_destroy(conn_acceptor_t *ca)
{
tsocket_destroy(ca->sock);
free(ca);
}
-event_t *conn_acceptor_event_create(struct tsocket *sock, evloop_t **evloops, int nevloops)
+event_t *conn_acceptor_event_create(conn_acceptor_t *acceptor)
{
- conn_acceptor_t *acceptor = conn_acceptor_create(sock, evloops, nevloops);
- event_t *ev = event_create(acceptor, sock->fd,
+ event_t *ev = event_create(acceptor, acceptor->sock->fd,
(evloop_process_func_t) conn_acceptor_accept,
(evloop_destroy_func_t) conn_acceptor_destroy);
return ev;
}
+
+void conn_acceptor_on_connect(conn_acceptor_t *acceptor, connection_callback_func_t func)
+{
+ acceptor->conn_callback_func = func;
+}