Network wrapper protocol as part of the practical master thesis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

61 lines
1.6 KiB

#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;
}