aboutsummaryrefslogtreecommitdiff
path: root/acceptor.c
diff options
context:
space:
mode:
authorGuangxiong Lin <[email protected]>2022-12-02 12:18:57 +0800
committerGuangxiong Lin <[email protected]>2022-12-02 12:18:57 +0800
commit0457119acb36b89b6f2f4534fe8ad94b19540bbd (patch)
tree865660e935da9a4adc34f17237e7e83364b53fc6 /acceptor.c
parent6ec515e5515fbf529e3610a2c88116278af2a134 (diff)
downloadtinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.tar.gz
tinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.tar.bz2
tinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.zip
Refactor
Diffstat (limited to 'acceptor.c')
-rw-r--r--acceptor.c51
1 files changed, 51 insertions, 0 deletions
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 <stdbool.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#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;
+}