#include #include #include #include #include "tsocket.h" struct tsocket *tsocketNew() { 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 tsocketBind(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 tsocketListen(struct tsocket *sock) { return listen(sock->fd, SOMAXCONN); } struct tsocket *tsocketAccept(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 tsocketDelete(struct tsocket *sock) { close(sock->fd); free(sock); }