#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; }