From 0457119acb36b89b6f2f4534fe8ad94b19540bbd Mon Sep 17 00:00:00 2001 From: Guangxiong Lin Date: Fri, 2 Dec 2022 12:18:57 +0800 Subject: Refactor --- acceptor.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 acceptor.c (limited to 'acceptor.c') diff --git a/acceptor.c b/acceptor.c new file mode 100644 index 0000000..bb4fb88 --- /dev/null +++ b/acceptor.c @@ -0,0 +1,51 @@ +#include +#include +#include + +#include "acceptor.h" +#include "util.h" +#include "connection.h" + +int connAcceptorAccept(struct connAcceptor *ca) +{ + struct tsocket *conn_sock = tsocketAccept(ca->sock); + if (conn_sock == NULL) { + perror("socket accept"); + return 0; + } + + if (setblocking(conn_sock->fd, false) == -1) { + perror("setblocking"); + tsocketDelete(conn_sock); + return 0; + } + + struct connection *conn = connectionNew(conn_sock); + struct event *conn_ev = connectionNewEvent(conn); + + if (eventLoopAdd(ca->el, conn_ev, EPOLLIN | EPOLLET) == -1) { + perror("eventloop add fd: conn_sock"); + return 0; + } + + printf("New client fd %d, ip: %s, port: %d\n", + conn_sock->fd, conn_sock->addr, conn_sock->port); + + return 0; +} + +void connAcceptorDel(struct connAcceptor *ca) +{ + tsocketDelete(ca->sock); + free(ca); +} + +struct event *connAcceptorNewEvent(struct tsocket *sock, struct eventLoop *el) +{ + struct connAcceptor *ca = malloc(sizeof(*ca)); + ca->sock = sock; + ca->el = el; + + struct event *ev = eventNew(ca, sock->fd, connAcceptorAccept, connectionDel); + return ev; +} -- cgit v1.2.3