#include "client.h" client_t* client_open(conn_handler handler) { struct sockaddr_in servaddr; client_t *client = malloc(sizeof(client_t)); if(NULL == handler) { printf("client_open: received empty handler, stopping"); return NULL; } if (NULL == client) { printf("client_open: malloc failed"); return NULL; } client->conn = connection_create(CONN_TYPE_CLIENT); if (NULL == client->conn) { free(client); return NULL; } client->handler = handler; client->conn->fd = socket(AF_INET, SOCK_STREAM, 0); if (-1 == client->conn->fd) { printf("client_listen: failed to create endpoint.\n"); return NULL; } return client; } int client_connect(client_t *client, char *ip_str, int16_t port) { struct sockaddr_in servaddr; unsigned int servaddr_len = 0; if(client == NULL) { return -1; } servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(ip_str); servaddr.sin_port = htons(port); servaddr_len = sizeof(servaddr); if(0 >= connect(client->conn->fd, (const struct sockaddr *) &servaddr, servaddr_len)) { printf("client_accept: connection to server failed\n"); return -1; } else { client->handler(client->conn->fd); } return 0; } int client_close(client_t *client) { int err = 0; if (NULL == client) { return 0; } if (0 != connection_destroy(client->conn)) { printf("client_close: closing socket failed\n"); err = -1; } free(client); return err; }