#include #include #include #include #include "tsocket.h" struct tsocket *tsocket_create() { int fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) return NULL; struct tsocket *sock = malloc(sizeof(*sock)); sock->fd = fd; return sock; } int tsocket_bind(struct tsocket *sock, const char *addr, int hostport) { struct sockaddr_in sock_addr; sock_addr.sin_family = AF_INET; sock_addr.sin_addr.s_addr = inet_addr(addr); sock_addr.sin_port = htons(hostport); sock->addr = addr; sock->port = hostport; return bind(sock->fd, (struct sockaddr *)&sock_addr, sizeof(sock_addr)); } int tsocket_listen(struct tsocket *sock) { return listen(sock->fd, SOMAXCONN); } struct tsocket *tsocket_accept(struct tsocket *sock) { struct sockaddr_in addr; socklen_t addr_len = sizeof(addr); int fd = accept(sock->fd, (struct sockaddr *)&addr, &addr_len); if (fd == -1) return NULL; struct tsocket *conn_sock = malloc(sizeof(*conn_sock)); conn_sock->fd = fd; conn_sock->addr = inet_ntoa(addr.sin_addr); conn_sock->port = ntohs(addr.sin_port); return conn_sock; } void tsocket_destroy(struct tsocket *sock) { close(sock->fd); free(sock); } int tsocket_fd(tsocket_t *sock) { return sock->fd; }