#include #include #include #include #include "connection.h" #include "constant.h" #define READ_BUFFER_SIZE 1024 struct connection { struct tsocket *sock; }; struct connection *connection_create(struct tsocket *sock) { struct connection *conn = malloc(sizeof(*conn)); conn->sock = sock; return conn; } void connection_destroy(struct connection *conn) { tsocket_destroy(conn->sock); free(conn); } static void echo(struct connection *conn) { char buf[READ_BUFFER_SIZE]; ssize_t n_read_bytes; struct tsocket *sock = (struct tsocket *)conn->sock; for (;;) { n_read_bytes = read(sock->fd, buf, sizeof(buf)); if (n_read_bytes > 0) { printf("message from conn %d: %s\n", sock->fd, buf); write(sock->fd, buf, sizeof(buf)); } else if (n_read_bytes == 0) { printf("conn %d disconnected\n", sock->fd); return; } else if (n_read_bytes == -1) { if (errno == EAGAIN || errno == EWOULDBLOCK) break; } } } event_t *connection_create_event(struct tsocket *sock) { connection_t *conn = connection_create(sock); return event_create(conn, conn->sock->fd, (evloop_process_func_t) echo, (evloop_destroy_func_t) connection_destroy); }