blob: bb4fb88a3a7a2e22e10f23cbf3a98ce61d7be7e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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;
}
|